Добавить номера строк в исходный код в vim - PullRequest
70 голосов
/ 31 октября 2008

Как я могу добавить номера строк в диапазон строк в vim? Не так, как в ": set nu" - это просто отображает числа, но не добавляет их в файл.

Ответы [ 7 ]

108 голосов
/ 31 октября 2008

С

:%s/^/\=line('.')/

РЕДАКТИРОВАТЬ: суммировать комментарии.

Эту команду можно настроить столько, сколько вы хотите.


Допустим, вы хотите добавить числа перед строками из визуального выделения (V + перемещение), и вы хотите, чтобы нумерация начиналась с 42.

:'<,'>s/^/\=(line('.')-line("'<")+42)/

Если вы хотите добавить строку между числом и старым текстом из строки, просто объедините (с . в VimL) его с выражением числа:

:'<,'>s/^/\=(line('.')-line("'<")+42).' --> '/

Если вам нужно это отсортировать как текст, вы можете обнулять результаты, что можно сделать, используя printf для 0001, 0002 ... вместо 1, 2 ... например:

:%s/^/\=printf('%04d', line('.'))/

В любом случае, если вам нужна дополнительная информация, просто откройте справку vim: :h :s и перейдите по ссылкам (|subreplace-special|, ..., |submatch()|)

33 голосов
/ 31 октября 2008

cat -n добавляет номера строк к своему входу. Вы можете передать текущий файл в cat -n и заменить текущий буфер тем, что он печатает в стандартный вывод. К счастью, это запутанное решение содержит менее 10 символов в vim:

 :%!cat -n

Или, если вы хотите просто выбрать, визуально выберите область и введите:

 :!cat -n

Это автоматически вставит маркеры визуального выделения и будет выглядеть после ввода:

 :'<,'>!cat -n

Чтобы стереть номера строк, я рекомендую использовать control-v, что позволит визуально выбрать прямоугольник, затем вы можете удалить этот прямоугольник с помощью x.

22 голосов
/ 31 октября 2008

В системе GNU: с внешним nl двоичным файлом:

:%!nl
6 голосов
/ 31 октября 2008

В Unix-подобной среде вы можете легко использовать cat или awk для генерации номера строки, потому что vim имеет дружественный интерфейс с shell, поэтому все работает в vim так же, как и в shell. От Vim Tip28 :

:%!cat -n

или

:%!awk '{print NR,$0}'

Но, если вы используете vim в MS-DOS, win9x, win2000, вы потеряете этот инструментарий. Вот очень простой способ заархивировать это только с помощью vim:

fu! LineIt()
  exe ":s/^/".line(".")."/"
endf

Или последовательность, составленная из алфавита, так же проста, как и выше:

exe "s/^/".nr2char(line("."))."/" 

Вы также можете использовать субстрат:

:g/^/exe ":s/^/".line(".")."^I/"

Вы также можете печатать только строки без добавления их в файл:

"Иногда это может быть полезно, особенно при редактировании больших исходных файлов для печати номеров строк на бумаге.
Для этого вы можете использовать опцию :set printoptions=number:y для активации и :set printoptions=number:n для деактивации этой функции.
Если номер строки должен печататься всегда, поместите строку set printoptions=number:y в vimrc. "

4 голосов
/ 13 января 2011

Сначала вы можете удалить существующие номера строк, если вам необходимо:

:%s/^[0-9]*//

Затем вы можете добавить номера строк. NR относится к текущему номеру строки, начинающемуся с единицы, так что вы можете сделать некоторые математические вычисления, чтобы получить желаемую нумерацию. Следующая команда дает вам четыре цифры номера строки:

:%!awk '{print 1000+NR*10,$0}'
3 голосов
/ 02 ноября 2008

Плагин "VisIncr" подходит для вставки столбцов с увеличивающимися числами вообще (или букв, дат, римских цифр и т. Д.). Вы можете управлять форматом чисел, заполнением и так далее. Поэтому вставьте «1» перед каждой строкой (через :s или :g или вставку визуального блока), выделите этот столбец в режиме визуального блока и выполните одну из команд из плагина.

0 голосов
/ 08 сентября 2018

Если кто-то хочет поставить табуляцию (или несколько пробелов) после вставки номеров строк, используя , этот отличный ответ , вот способ. После перехода в режим выхода выполните:

:%s/^/\=line('.').'    '/

^ означает начало строки, а %s - директива для подстановки. Итак, мы говорим, что ставим номер строки в начале каждой строки и добавляем к ней 4 пробела, а затем помещаем все содержимое строки перед заменой, и делаем это для всех строк в файле.

Это автоматически заменит его. В качестве альтернативы, если вы хотите, чтобы команда запросила подтверждение от вас, выполните:

:%s/^/\=line('.').'    '/igc

P.S: сила VIM :)

...