Как я могу удалить все строки в файле, используя vi?
Сейчас я делаю это, используя что-то вроде этого, чтобы удалить все строки в файле:
echo > test.txt
Как я могу удалить все строки, используя vi
?
Примечание:
использование dd
не является хорошим вариантом. Там может быть много строк.
1GdG
будет работать из любого места.echo | test.txt
не является допустимой командой, еслиtest.txt
это не исполняемый скрипт. Я предполагаю, что вы имеете в видуecho >test.txt
вместо этого?vi
,>test.txt
достаточно обрезать его до нулевой длины - неecho
нужно.Ответы:
В
vi
делатьудалить все строки.
:
Вводит команду (и перемещает курсор вниз).Это
1,$
указание того, над какими строкамиd
должна работать следующая команда ( ). В этом случае диапазон от первой строки до последней строки (обозначен$
, так что вам не нужно знать количество строк в документе).Финал
d
обозначает удаление указанных строк.Существует более короткая форма (
:%d
), но я никогда не использую ее. Это:1,$d
может быть легче "приспособлено", например,:4,$-2d
оставить только первые 3 и последние 2 строки, удалив остальные.источник
ESC+dd+dd+dd+dd+dd+dd+dd+dd+dd+dd+dd+dd+dd+dd+dd+dd...
.
следующий раз повторить командуВ vi я использую
где
:
говорит vi перейти в командный режим%
означает все строкиd
: удалятьВ командной строке
будет делать также.
В чем проблема с дд?
где
/dev/null
специальный 0-байтовый файлif
это входной файлof
это выходной файлисточник
dd
мне нужно Pess для каждой строки в файле.dd
команду vi (которую имел в виду OP) иdd
утилиту, которую вы приводите в качестве примера. Кроме того,> test.txt
может не работать должным образом в оболочках, отличных от bash (например, zsh).: >test.txt
что очень незначительно дольше.Я бы порекомендовал вам просто сделать это (должно работать в любой POSIX-совместимой оболочке):
Если вы действительно хотите сделать это с помощью vi, вы можете сделать:
источник
G
представляет последнюю строку. Если вы находитесь на первой строке (gg
),dG
указывает vi удалить все строки из текущей строки (первой строки) до последней строки. Итак, вы делаете это в один выстрел.gg
является специфическим для vim. Это1G
в традиционном vi.>| test.txt < /dev/null
является несколько более надежным, поскольку он всегда будет загромождать файл и избегать ожидания ввода на интерактивных терминалах.Если ваш курсор находится на первой строке (если нет, введите:
gg
или1G
), то вы можете просто использоватьdG
. Это удалит все строки от текущей строки до конца файла. Поэтому, чтобы убедиться, что вы удалите все строки из файла, вы можете смешать обе вместе, что будет:ggdG
(в командном режиме).Или
%d
в режиме Ex, пример командной строки:vim +%d foo.bar
.Связанный: Как я могу удалить в VIM весь текст от текущей строки до конца файла?
источник
dG
это то, что я всегда использую.ggdG
) самый простой метод в Vim. Причина, по которой этот ответ не одобряется как другие, заключается в том, чтоgg
в чистом vi его нет?Я ленивый чувак, и мне нравится быть простым.
ggdG
пять нажатий клавиш в том числеShift
gg
идет к первой строке в файле,d
является началомd
глагола elete иG
является движением, чтобы перейти к нижней части файла. Более подробно, это перейти в начало файла и удалить все до конца плитки.источник
:$d
или:1,$d
это более быстрый способ (я пишу меньше символов) kkk:%d
Хорошая альтернатива, так как вы также используете только 5 нажатий клавиш.gg
этоvim
команда, а неvi
.Перейти к началу файла и нажмите dG.
источник
Я всегда использую
ggVG
gg
переходит к началу текущего файла редактированияV
(с заглавной буквы v) выберет текущую строку. В этом случае первая строка текущего файла редактированияG
(с заглавной буквы g) перейдет к концу файла. В этом случае, поскольку я выбрал первую строку,G
выделю весь текст в этом файле.Затем вы можете просто нажать
d
или,x
чтобы удалить все строки.источник
d
вертикально, он автоматически применяется аналогично.dl
удаляет символ справа,dj
удаляет, например, строку вниз.обратите внимание, что в вашем вопросе
echo > test.txt
создается файл с одним разрывом строки, а не пустой файл.Из оболочки рассмотрите возможность использования
echo -n > test.txt
или: > test.txt
.Хотя я обычно использую команду редактирования vi (я использую
ggdG
), вы также можете вызвать оболочку со ссылкой на текущий файл, например, так:Это почти так же кратко, как
ggdG
, но сложнее набрать, и вы также должны подтвердить, что вы хотите перезагрузить измененный файл, поэтому я не особенно рекомендую его в этом случае, но знать, как использовать команды оболочки из vi, как это полезно.ломая это:
:
инициировать команду vi!
инициировать команду оболочки:
это встроенная команда оболочки с пустым выводом>
перенаправить вывод%
vi заменяет это именем текущего файлаПредложенный вариант,
:1,$d
конечно, тоже хорош, и пока я на нем,1GdG
источник
:!:>%
также опасно, посколькуvi
не экранирует имя файла для оболочки (не делайте этого при редактировании файла, вызываемого,$(reboot)
например). Вам нужно что-то:call system(":>" . shellescape(expand("%")))
Другое решение:
источник
>file
но хорошо.Тип
:
и%d
(Не в режиме вставки. Если это так, сначала нажмите escape)
источник
Вы можете использовать трюк, чтобы удалить большое количество строк. Убедитесь, что вы не находитесь в режиме вставки (нажмите ESC), затем введите 1000dd.
источник
Я печатаю,
gg
чтобы достичь вершины линий, а затем сделать100 dd
. Это приводит указатель к верхней строке редактора и очищает оттуда 100 строк. Возможно, вам придется изменить число, чтобы добавить больше строк, если файл длиннее.источник
Вам даже не нужно открывать vi, если вы действительно не хотите.
источник
bash: > file.txt: command not found
."> file.txt"
.: vi >file.txt
;-)