Удалить 100 строк из редактора vi с помощью одной команды

33

Я использую Ubuntu и пытаюсь удалить все 100 строк из viредактора, но у меня возник вопрос на вопрос об этом в одной команде.

Майур Мехта
источник
Не решение VI, а из командной строки: echo -n > <file>удаляет все строки из файла (фактически просто перезаписывает файл с помощью "").
Azz
3
@ Не нужно echoвообще использовать для этого; > $fileработает просто отлично.
CVn
4
Что это за компания, задающая вопросы viв интервью?
CVn
2
На этот вопрос легко ответить с элементарным знанием vi. На компьютере с установленным vim (в Ubuntu я бы порекомендовал этот vim-gtkпакет, поскольку он дает вам доступ к xclipboard в vim), введите vimtutorв командной строке (не в vim), чтобы получить интерактивный учебник по основам. Это не должно занять больше получаса, и это лучшее руководство по использованию vi / vim, которое вы, вероятно, найдете.
evilsoup
1
@ MichaelKjörling Я мог бы представить, что это произойдет в интервью, если заявитель упомянул предыдущий опыт vi(устно или резюме) или если вопрос был предварялся: «Хорошо, как системный администратор, вы должны знать кое-что о редакторах командной строки, верно ? Вы использовали vi? "
Wildcard

Ответы:

62

В обычном режиме делай

100dd

ddудаляет текущую строку При вводе этой команды 100ее повторяется 100 раз.

Если в файле меньше 100 строк, начиная с текущей строки, в зависимости от viреализации, он либо не удалит, либо удалит столько, сколько имеется. В случае vim, это зависит от того, cpвключена compatibleопция aka или нет.

200_success
источник
неправильный ответ, это только удаление текущей строки
Mayur Mehta
Я хочу удалить 100 строк, используя одну команду за один раз
Mayur Mehta
13
100ddэто правильный ответ. Интересно, что ты делаешь.
ott--
1
@mayurMehta не знает, какая компания задает подобные вопросы, и не знает, чего они ждут в качестве ответа. Но любой начинающий пользователь VI будет знать, что 100dd является правильным ответом.
Муним
1
@vgoff Я не знаю .. Если они не ищут общего решения для проверки ваших базовых навыков работы с vim, то это просто вопрос с подвохом для опрашиваемых. Я бы сказал, 100dd это ответ. Если интервьюер спрашивает: «Что произойдет, если файл содержит менее 100 строк из текущего курсора?», Я отвечу: «Команда удаляет то, что может из текущего курсора». Это совершенно разумно. Если интервьюер не уточнит, почему курсор не будет на первой строке? Я ненавижу такие хитрые вопросы.
Munim
44
  1. удалить 100 строк вперед (включая) из текущей

    • повторить дд (удалить текущую строку) 100 раз:

      100dd
      
    • удалить из текущей строки до 99 строк вперед

      d99j
      
  2. удалить 100 строк назад из (включая) текущего

    d99k
    
  3. удалить строки в определенном диапазоне по номеру строки

    :1,100d
    
  4. удалить строки в диапазоне, начинающемся с текущей строки

    :.,.+99d
    

и т. д.

Бесполезный
источник
2
число 4 удалит текущую строку (0) до 101-й (0 + 100) строк, следовательно, 101 строка вместо запрошенных 100. try:.,+99d
Olivier Dulac
Драт, и я получил правильные движения! Спасибо.
бесполезно
100dd у меня тоже не сработал - но # 4 выше отлично работает для меня в VI под Solaris 10.
DemiSheep
8

Если все строки в файле должны быть удалены, эта команда vi задает диапазон удаления:

:1,$d

1обозначает первую строку и $обозначает последнюю строку

suspectus
источник
или :%d (в ":" context, ":% ..." это сокращение от ": 1, $ ...")
Оливье Дюлак
также приятно: d Gключи & rarr; убить весь контент от фактической [например, верхней строки] до нижней строки
erch
3

Вы хотите удалить все строки в файле? Откройте файл с помощью vi. Находясь в начале первой строки - расположение курсора по умолчанию при открытии файла - нажмите, Escа затем dG.

Просто чтобы отметить, действие dуказывает на удаление и Gуказывает на последнюю строку файла. Таким образом, в то время как в любой строке вы нажимаете dG, она удаляет все строки, начиная с текущей строки до последней.

Если вы знаете , какие последовательные строки для удаления - скажем, от линии 101 до 200 - типа в следующих ключевых последовательностях: Esc:101,200d.

Барун
источник
Не нужно нажимать escape, если вы только что открыли файл и находитесь в начале файла. Вы автоматически (по умолчанию) в обычном режиме.
vgoff
3

Независимо от того, где вы находитесь в файле, вы можете сделать ggdG

:%dбудет лучше в меньшем количестве нажатий клавиш. Ну, считая shiftи enterключи, на самом деле еще два нажатия клавиш , чем выше.

Выполнение чего-либо подобного 100ddудалит только до 100 строк, где вы находитесь, и это может не удалить все строки из файла, в зависимости от вашей текущей позиции строки.

vgoff
источник
0

Esc n dd. n - это количество строк, которые нужно удалить, включая текущую строку. Нажмите кнопку «Esc», затем «n», а затем «dd». Для лучшего понимания

Рида Абид
источник
Какова необходимость побега здесь
Prvt_Yadav
Этот ответ идентичен принятому ответу.
Кусалананда
Escape на всякий случай, если вы находитесь в режиме вставки.
Рида Абид