Vim :s замените первый N <g случаи на строке

Можно установить Linux под a chrootсреда редактора (из Вашей существующей Ubuntu). Я не могу найти руководство DSL прямо сейчас, но это хинду руководство может помочь.

Добавление новой установки на меню начальной загрузки так же легко как выполнение update-grub (существует сценарий, который пытается зондировать Ваш жесткий диск и добавляет вещи, поскольку он находит). Если это не работает, вручную добавляя, что новая запись в Grub2 справедлива vim /etc/grub.d/40_custom и update-grub снова (это руководство Ubuntu подошло сначала от поиска с помощью Google).

Удачи!

13
19.12.2011, 20:36
4 ответа

Здание :s/pattern/replacement/gc идея от Samus_ (который, кажется, самый простой способ гарантировать корректную операцию, когда шаблон содержится в замещающей строке), для замены 2-го посредством 4-х случаев на одной строке:

:call feedkeys("nyyyq") | s/pat/string/gc

feedkeys() функция, которая наполняет входную строку в очередь ввода с клавиатуры. Точка должна сделать подсчет заранее, таким образом, Вы не должны волноваться о терении счета или быть прерванным.

Для более общего случая, для замены Mth посредством Энных случаев на одной строке для N, больше, чем или равный очень большому M:

:call feedkeys(repeat("n", M-1) . repeat("y", N-M+1) . "q") | s/pat/string/gc

Замените M и N со значениями, которые Вы хотите (можно даже позволить vim сделайте тривиальный счет в уме, если Вы не хотите делать это сами). Отметьте это . оператор объединения строк VimL. Очевидно, это только сохраняет нажатия клавиш для большого M. При использовании этой функциональности часто она может сэкономить Вам время для помещения вышеупомянутого в пользовательскую команду или какую-то функцию, как это вполне немного для ввода.

10
27.01.2020, 19:52
  • 1
    Хм. Мне нравится этот. Я должен смочь записать функцию для него также. –  Kevin 24.01.2012, 18:32

Для первого вопроса я сделал бы:

:s/a/b
&&

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

:s/a/b/gc

Затем Вы отвечаете "нет" на первые соответствия n и "да" другим.

8
27.01.2020, 19:52
  • 1
    Хм, я забыл о c, это могло бы быть лучшим решением, предложенным все же. Я должен был бы все еще рассчитать, но я думаю, что это - первая опция, которая работала бы с заменами, которые содержат строку поиска. –  Kevin 20.12.2011, 18:56
a a a a a
a a a a a
a a a a a
a a a a a
a a a a a
a a a a a
a a a a a

:3,6g/^/let i=0 | while i<3 | s/a/b/ | let i+=1 | endwhile

a a a a a
a a a a a
b b b a a
b b b a a
b b b a a
b b b a a
a a a a a
6
27.01.2020, 19:52
  • 1
    Это хорошо, но это все еще переносит от проблемы Gilles, на которого указывают (на другом сообщении, которое с тех пор, кажется, было удалено), что это только работает, если замена не содержит шаблон. Хотя мне действительно нравится идея сценариев. рабочая станция –  Kevin 20.12.2011, 17:46
  • 2
    вещь красоты! –  bishop 22.02.2015, 22:42

Я думаю, это может сработать, сначала заменить, а потом повторить 2 раза:

:s/a/b/
2@:
1
27.01.2020, 19:52

Теги

Похожие вопросы