Как я могу добавить номера строк к диапазону строк в файле, открытом в Vim? Не так, как в :set nu
— это просто отображает номера строк, — но действительно ли они должны быть добавлены к каждой строке в файле?
Как добавить номера строк в диапазон строк в Vim?
Ответы (7)
С
:%s/^/\=line('.')/
РЕДАКТИРОВАТЬ: подвести итоги комментариев.
Эту команду можно настроить так, как вы хотите.
Допустим, вы хотите добавить числа перед строками из визуального выделения (V
+ перемещение) и хотите, чтобы нумерация начиналась с 42.
:'<,'>s/^/\=(line('.')-line("'<")+42)/
Если вы хотите добавить строку между числом и старым текстом из строки, просто соедините ее (с .
в VimL) с числовым выражением:
:'<,'>s/^/\=(line('.')-line("'<")+42).' --> '/
Если вам нужно это для сортировки текста, вы можете обнулить результаты, что можно сделать, используя printf
для 0001, 0002
... вместо 1, 2
... например:
:%s/^/\=printf('%04d', line('.'))/
В любом случае, если вам нужна дополнительная информация, просто откройте vim help: :h :s
и перейдите по ссылкам (|subreplace-special|
, ..., |submatch()|
)
offset
может быть 1-line("'<")
. Интересно, почему такой старый вопрос появился в моем RSS.
- person ZyX; 13.01.2011
:help :s
здесь), советы по vim (vim.wikia.com), плагины, написанные другими, vim_use (официальный список рассылки) и форумами, подобными этому.
- person Luc Hermitte; 11.02.2011
=line
в справке. Мне интересно, какие другие команды вы можете использовать в качестве замены при замене.
- person dsg; 12.02.2011
:h :s
-> subreplace-special
- person Luc Hermitte; 12.02.2011
:%s/^/\=line('.') . 'string'/
. в моем случае мне нужна была запятая, так как я нумеровал строки в CSV-файле, поэтому я сделал :%s/^/\=line('.') . ','/
- person katy lavallee; 22.10.2011
2,11s/^/\=line('.')/
- person David C. Rankin; 08.07.2014
cat -n
добавляет к входным данным номера строк. Вы можете передать текущий файл в cat -n
и заменить текущий буфер тем, что он выводит на стандартный вывод. К счастью, это запутанное решение занимает менее 10 символов в vim:
:%!cat -n
Или, если вам нужен только подвыбор, визуально выберите область и введите следующее:
:!cat -n
Это автоматически поместит маркеры визуального выбора и будет выглядеть так после того, как вы наберете его:
:'<,'>!cat -n
Чтобы стереть номера строк, я рекомендую использовать control-v
, что позволит вам визуально выделить прямоугольник, затем вы можете удалить этот прямоугольник с помощью x
.
В системе GNU: с внешним двоичным файлом nl
:
:%!nl
В Unix-подобной среде вы можете использовать cat или awk для простого создания номера строки, поскольку vim имеет удобный интерфейс с оболочкой, поэтому все работает в vim так же, как и в оболочке.
From Vim Tip28:
:%!cat -n
or
:%!awk '{print NR,$0}'
Но, если вы используете vim в MS-DOS, win9x, win2000, вы теряете этот инструментарий. вот очень простой способ заархивировать это только с помощью vim:
fu! LineIt()
exe ":s/^/".line(".")."/"
endf
Или последовательность, составленная из алфавита, так же проста, как и выше:
exe "s/^/".nr2char(line("."))."/"
Вы также можете использовать subst:
:g/^/exe ":s/^/".line(".")."^I/"
Вы также можете распечатать только строки, не добавляя их в файл:
"Иногда это может быть полезно, особенно при редактировании больших исходных файлов, чтобы распечатать номера строк на бумаге.
Для этого вы можете использовать опцию:set printoptions=number:y
для активации и:set printoptions=number:n
для деактивации этой функции.
Если номер строки должен печататься всегда, поместите строкуset printoptions=number:y
вvimrc
."
cat
на call
... (источник, вероятно, Vim tip28, как в neuron.tuke.sk/~hudecm/VimTips-OFFLINE-nov02.txt)
- person VonC; 12.01.2011
:%!awk '{print 1000+NR*10,$0}'
. Единственная проблема сейчас (которой не так много) заключается в том, что мой оператор удаления :%s/^[0-9]*// оставляет лишние пробелы спереди, и ссылка на \s, похоже, не помогает.
- person Lance Roberts; 13.01.2011
:%!cat -n
но как их можно удалить?
- person Cristian; 12.04.2016
Во-первых, вы можете удалить существующие номера строк, если вам нужно:
:%s/^[0-9]*//
Затем вы можете добавить номера строк. NR
относится к текущему номеру строки, начинающемуся с единицы, поэтому вы можете выполнить некоторые математические операции, чтобы получить нужную нумерацию. Следующая команда дает вам четырехзначные номера строк:
:%!awk '{print 1000+NR*10,$0}'
Плагин "VisIncr" удобен для вставки столбцов возрастающих чисел в общий (или буквы, даты, римские цифры и т. д.). Вы можете управлять числовым форматом, заполнением и так далее. Поэтому вставьте «1» перед каждой строкой (через :s
или :g
или вставку визуального блока), выделите этот столбец в режиме визуального блока и выполните одну из команд из плагина.
Если кто-то хочет поместить вкладку (или несколько пробелов) после вставки номеров строк, используя этот отличный ответ, вот способ . После перехода в режим побега выполните:
:%s/^/\=line('.').' '/
^
означает начало строки, а %s
— директиву для подстановки. Итак, мы говорим, что помещаем номер строки в начало каждой строки и добавляем к нему 4 пробела, а затем помещаем то, что было содержимым строки перед заменой, и делаем это для всех строк в файле.
Это автоматически заменит его. В качестве альтернативы, если вы хотите, чтобы команда запросила у вас подтверждение, выполните:
:%s/^/\=line('.').' '/igc
P.S: сила vim :)