Есть ли способ вставить « » в один и тот же столбец, поскольку все строки имеют разную длину, поэтому строка 1 может иметь « » в 15-м столбце, а строка 2 - «*» в 25-м столбце.
Аман Джайн
11
в строке только 1 EOL, поэтому gфлаг не нужен.
Двойной Вниз
Я хотел добавить / в начало каждой строки: 1, $ s / ^ / \ / g работал для меня.
farooqsadiq
@dirkgently Как я могу передать строковую переменную в качестве аргумента этой команде (вы знаете, вместо *)?
Матеус Ротта
353
Даже короче, чем команда: search:
:%norm A*
Вот что это значит:
%=for every line
norm = type the following commands
A*= append '*' to the endof current line
Чувак, не существует ни веток vi, ни vim, из которых я что-то не изучаю. Сегодня я узнаю о норме. И, как говорят на ура, "Норма!"
smcameron
4
Для предварительного добавления вы просто используете 0i *, 0 переводит вас в начало строки, i для режима вставки и * для *. D:
Роб
7
Как VimGolfer я не могу не добавить, что использование, I*а не 0i*сэкономит вам одно нажатие клавиши.
Джедидия Харт
24
Еще один совет: это работает и для диапазонов. Просто выделите строки в визуальном режиме и нажмите :, это предварительно заполнит команду, с :'<,'>которой вы можете затем выполнить:'<,'>norm A*
Jedidiah Hurt
8
Для предварительного использования используйте Iвместо -:%norm I*
Аааа ... Второй тоже можно использовать с выбором строк. Ницца!
Тим Флетчер
Не могли бы вы объяснить первый пример?
Коди Пол
@CodyPoll g- это globalкоманда, которая что-то делает с каждой соответствующей строкой. $соответствует каждой строке. Это может быть также ^или .*. norm выполняет команды, которые вы обычно используете в командном режиме. Значит, A*добавьте *в конец строки.
defhlt
41
Я думаю, что использование режима визуальных блоков - лучший и более универсальный метод для работы с такими вещами. Вот пример:
Thisis the First line.Thisis the second.The third.
Вставить «Привет, мир». (пробел + буфер обмена) в конце каждой из этих строк:
На символе в первой строке нажмите Ctrl-V (или Ctrl-Q, если Ctrl-V вставлен).
Нажмите jj, чтобы расширить визуальный блок на три строки.
Нажмите $, чтобы расширить визуальный блок до конца каждой строки. Нажмите A, затем пробел, затем введите Hello world. + затем Esc.
Результат:
Thisis the First line.Hello world.Thisis the second.Hello world.The third.Hello world.
Вместо нажатия jjможно нажать, Gчтобы перейти к последней строке. Это полезно в больших файлах, где нажатие jдо последней строки не практично.
Нэш
Согласитесь, что визуальный блок здесь самый чистый, а также более расширяемый
Питер Долан
Обратите внимание, что вначале кажется, что он не работает на всех строках, но после нажатия клавиши Esc он проходит и добавляет его ко всем.
Ноумен
Visual Block вызывает проблемы и ошибки при использовании vim в качестве расширения для других целей, таких как VS Code. В этих случаях поиск и замена исходного запрашиваемого пользователя является надежным вариантом.
Бреттинс
убедитесь, что вы используете заглавную букву А, строчная буква "а" не работает.
Джефф Хой
14
Если вы хотите добавить Hello world в конце каждой строки:
:%s/$/HelloWorld/
Если вы хотите сделать это для определенного числа строк, скажем, от 20 до 30, используйте:
:20,30s/$/HelloWorld/
Если вы хотите сделать это в начале каждой строки, используйте:
Это найдет каждый конец строки и заменит его на *. Я говорю «заменитель», но на самом деле это скорее дополнение, поскольку якорь - это особая вещь, а не обычный символ. Для получения дополнительной информации см. Power of g - examples .
Что означает s // в регулярном выражении? Я знаю аналогичную команду: g / / / p, (grep). Я почти уверен, что ваша команда близка к моей, по крайней мере, в структуре.
Лео Леопольд Герц
1
S является заменой - он заменяет привязку конца строки звездочкой (ну, фактически, не заменяет ее, так как это точка привязки).
paxdiablo
3
:% S / \ п / * \ г / г
Ваш первый верен где-то еще, но Vim по какой-то причине должен иметь другую обработку новой строки.
:s///
,\n
соответствует нулевому символу. Раздел:help sub-replace-special
актуален.Ответы:
:%s/$/\*/g
должно сработать. Так должно быть,
:%s/$/*/g
как правильно указывает мистер Вигглс .источник
g
флаг не нужен.Даже короче, чем команда: search:
Вот что это значит:
источник
I*
а не0i*
сэкономит вам одно нажатие клавиши.:
, это предварительно заполнит команду, с:'<,'>
которой вы можете затем выполнить:'<,'>norm A*
I
вместо -:%norm I*
Также:
Также:
источник
g
- этоglobal
команда, которая что-то делает с каждой соответствующей строкой.$
соответствует каждой строке. Это может быть также^
или.*
. norm выполняет команды, которые вы обычно используете в командном режиме. Значит,A*
добавьте*
в конец строки.Я думаю, что использование режима визуальных блоков - лучший и более универсальный метод для работы с такими вещами. Вот пример:
Вставить «Привет, мир». (пробел + буфер обмена) в конце каждой из этих строк:
Результат:
(пример с Vim.Wikia.com )
источник
jj
можно нажать,G
чтобы перейти к последней строке. Это полезно в больших файлах, где нажатиеj
до последней строки не практично.Если вы хотите добавить Hello world в конце каждой строки:
Если вы хотите сделать это для определенного числа строк, скажем, от 20 до 30, используйте:
Если вы хотите сделать это в начале каждой строки, используйте:
источник
Вам действительно не нужно
g
в конце. Так и становится:Или, если вы просто хотите
*
в конце, скажите строки 14-18:или
источник
... и добавить (добавить начало) каждую строку с *,
источник
Один из вариантов:
Это найдет каждый конец строки и заменит его на
*
. Я говорю «заменитель», но на самом деле это скорее дополнение, поскольку якорь - это особая вещь, а не обычный символ. Для получения дополнительной информации см. Power of g - examples .источник
Ваш первый верен где-то еще, но Vim по какой-то причине должен иметь другую обработку новой строки.
источник
это поможет, и ведущие пробелы будут проигнорированы.
источник