В vim мне часто нужно удалять, или дергать / помещать большие блоки текста.
Я могу посчитать строки текста и ввести что-то вроде 50dd
удаления 50 строк.
Но это немного больно. Как я могу удалить этот большой блок текста, не зная заранее, сколько строк удалить?
move
до конца. Тогда удаление до конца ничем не отличается от перемещения до конца.Ответы:
Перейдите к начальной строке своего блока и введите ma(отметьте «a», хотя вы, конечно, можете использовать разные буквы и даже несколько букв для разных отметок, при условии, что вы можете держать это прямо в голове, над чем каждая буква является знаком) ,
Затем перейдите к последней строке и введите d'a(удалить, чтобы отметить "a") или y'a(дернуть, чтобы отметить "a") (a) .
Это удалит / восстановит все строки от текущей до отмеченной (включительно).
Затем вы можете вставить его куда-нибудь с помощью обычных команд вставки, таких как pили P.
Он также совместим с
vi
, а такжеvim
, на всякий случай , что среда не благословлен с последним.(а) Я также использую это, чтобы сохранить свое место в файле, если мне придется искать в другом месте что-то вроде, например, вставки копии определения функции, которую я хочу вызвать.
Я просто помечаю текущую строку таким же образом ma, а затем отправляюсь на поиски того, что вы ищете.
Затем, как только я нашел его и скопировал в регистр, я просто 'aзахожу, чтобы вернуться, чтобы отметить «a», строку, которую я предварительно сохранил, где я могу затем вставить ее.
источник
v
клавишу, я спрашиваю себя, действительно ли она мне нужна или есть лучший способ движения?В Vim используйте режим визуальной линии :
Для удаления больших блоков текста это предпочтительнее простого визуального режима, потому что вам не нужно беспокоиться о том, в каком столбце находится курсор.
источник
}
чтобы выбрать весь абзац или)
для предложений. Есть еще, вы можете прочитать о них в:h object-motions
/something<CR>
помощью очень эффективного метода для достижения конца вашего блока выбораj
для перемещения курсора вниз (шаг 3), вы можете ввести номер строки, а затемG
выбрать ее до этой строки. Пример:V150Gd
Вы можете
:set relativenumber
, так что вам не нужно считать. ;)источник
:set number
, а затем используйте d35G для удаления до строки 35.relativenumber
, но лучше :-)Вы можете легко удалить большой блок текста, зная его структуру.
Если это абзац, используйте: d{(например, вы можете использовать префикс с количеством абзацев)
Если это блок кода в скобках, используйте: d%
Если текст появляется до конца файла, используйте: dG
Если вы знаете, как он заканчивается, используйте: d/и введите конечный текст, за которым следует Enter(вы также можете использовать регулярное выражение, поэтому возможности безграничны).
В качестве альтернативы используйте визуальный режим ( V) и используйте клавиши перемещения для быстрого выделения текста (например, с помощью {) и удаления его ( d).
Или, как предложил Lie Ryan, используйте
d/search-string/e
для удаления текста из текущего курсора в искомую строку.Смотрите:
:help d
и:help motion
для получения дополнительной информации.источник
d/search-string/e
возможность удалить от текущего курсора до конца строки поиска, включая саму строку поиска, иc/search-query
перейти в режим вставки после удаления. Использованиеd/
withset incsearch
- это аккуратная комбинация, так как она позволяет вам в интерактивном режиме выяснить, работаете ли вы с правильным текстовым диапазоном, и помочь вам узнать, когда прекратить вводить поисковый запрос, чтобы избежать ввода больше, чем необходимо.d
сa
(внешний) илиi
(внутренний) и спецификатор объекта очень полезным. Объекты, такие какw
для слова,p
для абзаца,(
илиb
для(...)
,[
для[...]
,{
илиB
для{...}
и т. Д. Документации для визуальных операторов .Вы можете использовать движения и / или текстовые объекты. Например, вы можете удалить все от курсора до следующей пустой строки с помощью
d}
. Если курсор находится внутри абзаца, абзац можно удалить с помощьюdip
илиdap
. Если курсор находится внутри тега HTML, вы можете удалить его с помощьюdit
илиdat
.Хорошей мнемоникой для них являются « d elete i nside » и « d elete a round» (параграф / метка / скобка).
источник
Я обычно делаю
который удалит каждую строку между указанными номерами начальной и конечной строк (включая указанные строки).
Обратите внимание, что оба
start
иend
могут быть абсолютными номерами линий, шаблонами или смещениями из другой позиции.Также посмотрите комментарий DoubleDown о просмотре документации по диапазону Vim , в нем есть несколько полезных советов.
Пример:
Допустим, у вас есть следующий файл:
Затем с помощью команды
:2,3d
или:/fox/,/over/d
или:/quick/+1,/lazy/-1
или,:+1,+2d
если вы находитесь на первой строке, или:-1,.d
если вы находитесь на третьей строке, вы получите:источник
:set ruler
, затем перейдите к верху и низу текста, чтобы найтиstart
и найтиend
номера строк, затем сделайте:<start>,<end>d
:+12,+24d
<start>
и<end>
для этого. Для справки см:h [range]
. Так что это на самом деле немного более гибко, чем вы предполагали.Если вы имеете дело с блоками с разделителями (например: код или теги XML / HTML), с которыми вы имеете дело, вы можете поместить курсор в начало блока и использовать визуальный режим,
%
чтобы быстро выбрать целые блоки кода, а затем нажатьd
удалить их.источник
dap
чтобы удалить пункт,da(
,da{
,da[
, удалять блоки delimeted в круглые скобки, фигурные скобки, или квадратные скобки. Для html естьdat
, который удаляет тег,da'
иda"
удаляет строки. Существует такжеdip
,di(
и т.д. варианты, которые будут удалять все внутри ограничителей, но оставить разделители нетронутыми. Кроме того, вы можете использоватьvap
(соответственноvip
), чтобы выбрать весь (соответственно внутренний) абзац. (И так естьva(
иvi(
.) Далее естьcap
иcip
(илиca(
иci(
) удалить и перейти в режим вставки (т. Е. «Изменить»). Иyap
дергатьПомимо всего прочего полезного совета я добавляю d+ Shift+ Lдля удаления всего с текущей позиции курсора до последней видимой строки на экране. Повторение команды поможет вам сравнительно быстро.
источник
Numbers.vim плагин очень полезен для этого. Это улучшенный способ предварять каждую строку номером строки. Вроде
'number'
и'relativenumber'
оба в одном!Он включен по умолчанию после установки, вы также хотите добавить его
set number
в свой vimrc, если у вас его еще нет, поскольку он ведет себя странным образом, если у вас его нет.В обычном режиме это выглядит примерно так
:set relativenumber
:Он показывает относительные номера строк, за исключением строки, в которой находится курсор, где он показывает абсолютный номер строки (7 в данном случае).
Если мы затем переключимся в режим вставки , он будет вести себя так, как если бы он
number
был установлен, всегда показывая абсолютные номера строк:Есть еще несколько опций и несколько команд (проверьте домашнюю страницу), но значения по умолчанию должны работать для большинства людей.
источник
set number
,set relativenumber
тоautocmd InsertEnter * :set norelativenumber
иautocmd InsertLeave * :set relativenumber
Другой подход - если вы пытаетесь удалить определенный шаблон, вы можете просто напечатать d/
delim
Enter.источник
Вы можете использовать обычную процедуру ввода dплюс движение (как уже объяснено в других ответах). Плагин EasyMotion предоставляет новые движения, которые вы можете использовать, чтобы быстро и легко решить вашу проблему.
Скажем, вы хотите удалить из текущей позиции курсора до конца любого данного слова на экране, клавиши перемещения будут
<Leader>
<Leader>
e(сродни обычномуe
движению). Затем введите выделенную букву (буквы), которые появляются в конце слова, о котором идет речь. Существует также движение линии, поэтому вы можете удалить текущую строку до указанной строки с помощью<Leader>
<Leader>
j.У меня есть
<Leader>
ключ к ,. Итак, полная команда: d<Leader>
<Leader>
e{выделенная буква (ы)}.От
:help easymotion
:Редактировать:
GitHub- репозиторий EasyMotion находится по адресу https://github.com/Lokaltog/vim-easymotion .
Это реддит о людях, использующих easymotion, может быть весело читать.
источник
Существует простое решение, которое может решить вашу проблему.
Поместите курсор в начале текстового блока, который вы хотите удалить, и сделайте
d50gg
.Это удалит все строки из вашей текущей позиции до 50-й строки вашего текста.
eq: если ваш курсор находится на строке 46 ,
d50gg
удалит 4 строки.источник
G
вместо gg, так как он также работает в vi, и, конечно:set number
, всегда полезно найти номер строки, на которую вы хотите перейти.Используйте визуальный режим с подсветкой строк.
Я предпочитаю этот метод для удаления блоков кода, потому что он удаляет целые строки по сравнению с простым использованием визуального режима, где вы должны поместить курсор в правом столбце, чтобы удалить то, что вы хотите.
источник
Я не люблю, чтобы
relativenumber
все время было включено, поэтому я настроил свой Vim, чтобы он включался только тогда, когда я нахожусь в визуальном режиме:Это облегчает вашу задачу:
потому что после удара Vвы можете увидеть, как далеко находится целевая линия.
Это может раздражать в долгосрочной перспективе (текст смещается вправо и влево, когда относительное число включено / отключено), но пока мне это очень нравится.
источник
v<Esc>d50j
?V
того, что знаю, что буду выполнять линейную операцию, а затем могу оставитьd
до последнего для большей уверенности.Что отлично сработало для меня
vi
::set number
просматривать номер строки до того места, где я хотел удалить;Вернитесь к строке, где должно было начаться удаление
d1290G
источник