Удалить 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 или нет.


неправильный ответ, это только удаление текущей строки
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обозначает первую строку и $обозначает последнюю строку


или :%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 строк, где вы находитесь, и это может не удалить все строки из файла, в зависимости от вашей текущей позиции строки.


0

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


Какова необходимость побега здесь
Prvt_Yadav

Этот ответ идентичен принятому ответу.
Кусалананда

Escape на всякий случай, если вы находитесь в режиме вставки.
Рида Абид
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.