Добавить номера строк в исходный код в vim
Как добавить номера строк в диапазон строк в vim? Не так, как в ":set nu" - это просто отображает числа, но не добавляет их в файл.
8 ответов
С
:%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()|
)
cat -n
добавляет номера строк к своему входу. Вы можете передать текущий файл в cat -n
и замените текущий буфер тем, что он печатает на стандартный вывод. К счастью, это запутанное решение содержит менее 10 символов в vim:
:%!cat -n
Или, если вы хотите просто выбрать, визуально выберите область и введите:
:!cat -n
Это автоматически вставит визуальные маркеры выбора и будет выглядеть следующим образом после того, как вы его напечатаете:
:'<,'>!cat -n
Для того, чтобы стереть номера строк, я рекомендую использовать control-v
, который позволит вам визуально выбрать прямоугольник, вы можете затем удалить этот прямоугольник с x
,
В Unix-подобной среде вы можете легко использовать cat или awk для генерации номера строки, потому что vim имеет дружественный интерфейс с оболочкой, поэтому все работает в vim так же, как и в оболочке.
Из 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
".
Во-первых, вы можете удалить существующие номера строк, если вам нужно:
:%s/^[0-9]*//
Затем вы можете добавить номера строк. NR
относится к текущему номеру строки, начинающемуся с единицы, так что вы можете сделать некоторые математические вычисления, чтобы получить желаемую нумерацию. Следующая команда дает вам четыре цифры номера строки:
:%!awk '{print 1000+NR*10,$0}'
Плагин "VisIncr" удобен для вставки столбцов с увеличивающимися числами вообще (или букв, дат, римских цифр и т. Д.). Вы можете управлять форматом чисел, заполнением и так далее. Поэтому вставьте "1" перед каждой строкой (через :s
или же :g
или вставка визуального блока), выделите этот столбец в режиме визуального блока и выполните одну из команд из плагина.
Лучший ответ делается в дублирующем вопросе .
В итоге:
с тогдаG
I
0
Вы можете вставить столбец нуля.
Затем выберите весь столбец и увеличьте:
CTRL-V
g CTRL-A
См. также: https://vim.fandom.com/wiki/Making_a_list_of_numbers#Incrementing_selected_numbers
Если кто-то хочет поместить вкладку (или несколько пробелов) после вставки номеров строк, используя этот отличный ответ, вот способ. После перехода в режим выхода выполните:
:%s/^/\=line('.').' '/
^
означает начало строки и %s
это директива для замены. Итак, мы говорим, что ставим номер строки в начале каждой строки и добавляем к ней 4 пробела, а затем помещаем все содержимое строки перед заменой, и делаем это для всех строк в файле.
Это автоматически заменит его. В качестве альтернативы, если вы хотите, чтобы команда запросила у вас подтверждение, выполните:
:%s/^/\=line('.').' '/igc
PS: сила vim:)