Как включить движения курсора в макросах vim - PullRequest
2 голосов
/ 05 января 2012

Макросы, похоже, не учитывают нажатия клавиш. В этом конкретном случае я хочу написать макрос, который закомментирует строку (в латексных комментариях начинаются с %). Вот нажатия клавиш, которые я использую:

q + a + 0 + ш + i + % + j + j + j + д

Который назначает макрос a, переходит в начало строки, входит в режим вставки, помещает знак процента, выходит из режима вставки, перемещается вниз по строке и завершает макрос. Затем я использую макрос, как так

@ + а

Если у меня есть 4 строки, как это

1   In This life I have learned one thing █
2   It is pity incarnate of which I sing.
3   You have been told about the back of the crowd
4   And I repeat it, plenty loud.

использование макроса три раза вызывает это

1   %%%In This life I have learned one thing █
2   It is pity incarnate of which I sing.
3   You have been told about the back of the crowd
4   And I repeat it, plenty loud.

Когда то, что я хочу, это

1   %In This life I have learned one thing █
2   %It is pity incarnate of which I sing.
3   %You have been told about the back of the crowd
4   And I repeat it, plenty loud.

Точнее, я хочу иметь возможность 30 + @ + a , чтобы закомментировать 30 строк. Как мне это сделать?

Ответы [ 3 ]

5 голосов
/ 05 января 2012

Я бы пошел на:

:.,+30 s/^\s*/&%

Пояснение:

  • .,+30 - диапазон от текущей строки до текущей + 30 (следовательно, более 31 строки) (:help range)
  • s - команда подстановки (:help :s)
  • / - разделитель шаблонов
  • ^\s* - это шаблон (:help pattern), который соответствует любому количеству пробелов в начале строки
  • & - это специальный символ для замены, который вставляет соответствующий шаблон

Другой способ:

ab©d (cursor on the c)
efgh
ijkl

Тип CTRL-V , 2j, I, привет, Esc и вы получите:

abhellocd
efhellogh
ijhellokl
3 голосов
/ 05 января 2012

Хороший ответ Бенуа.

Я думаю, твой макрос должен быть

I%<Esc>j

После этого только

30@a

Если вы укоротите свой макрос до

I%<Esc>

Вы можете визуально выделить все строки и сделать

:'<,'>norm @a

или работайте в диапазоне, как в ответе Бенуа.

Вы также можете пропустить часть макроса и использовать режим VISUAL-BLOCK:

<C-v> " enter visual block mode
30G   " go to line 30
I%    " insert % at the beginning of selection
<Esc> " exit visual block mode
2 голосов
/ 05 января 2012

Вы можете использовать команду : normal . То, что он делает, это выполняет его аргумент как команды нормального режима. Также можно задать диапазон, поэтому, чтобы вставить% перед следующими 30 строками, вы можете ввести :.,+30 norm I%. I переводит vim в режим вставки с курсором в начале текущей строки. Поскольку вы сейчас находитесь в режиме вставки, % просто вставляет символ %.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...