Вопрос: Как использовать функциональность метки vim, но держите курсор там, где он


Вим-х отметить функциональность  позволяет применять функции к каждой линии между текущей строкой и отмеченной линией. Например, если я отмечаю следующую строку 3 с k 

1 var a = 0;
2 while (a < 10){
3 a++;
4 console.log('Hello');
5 console.log('world');
6 █
7 }

и из положения курсора ( ) выдать команду >'k, Я получу следующее

1 var a = 0;
2 while (a < 10){
3 █  a++;
4    console.log('Hello');
5    console.log('world');
6
7 }

(Примечание: курсоры могут быть a, но это не важно)

Это желаемый эффект, но теперь курсор переместился полностью назад. В большинстве случаев это желательно, поскольку я обычно хочу редактировать сверху. Но в этом случае я могу захотеть снова отступить, поэтому мне нужно снова перейти на дно. В случаях, когда я набираю 20 строк, это становится настоящей работой.

Как временно отключить эту функцию поиска?


4


источник


Ответы:


После того, как вы > ' К  просто ударил ' '  (одинарная кавычка, одинарная кавычка), - думаю, не обратно, а ты вернешься туда, где был.

Если вы это часто делаете, вы можете сопоставить ключ, чтобы сделать это в одном:

:map >> >'k''

Тогда всякий раз, когда вы > >  он выполнит эту последовательность.


3



Самое простое решение - нажать ` `  (т. е. обратно-галочкой два раза) после вашей команды, чтобы вернуться в предыдущее местоположение.


5



Это зависит от того, сколько раз вы хотите повторить это действие.

  • Если бы это было 2 или 3 раза, я бы использовал:

    «»  вернуться к строке 6.
    ,  чтобы повторить вашу последнюю команду (отступы этих строк).

  • Если бы было больше раз, я бы использовал макрос qa чтобы начать запись, q прекратить запись и <number>@a повторить его.


1



Самый точный ответ, о котором я могу думать, это просто:

:'k,.>

I.e., используйте команду командного режима с диапазоном ( :he :range, и другие разделы )

Фактически, вы сможете делать «удаленные действия», которые будут напоминать иллюзии левитации для начинающих программистов, не связанных с vim. Просто попробуй

:'k>

Отступы от выделенной линии, издалека ! 1

Вы обнаружите, что большинство интересных команд редактирования имеют версию с командным режимом. Например.

:'ky|put

Погружая отмеченную строку, поместите ее после текущей строки курсора.

Если команды командного режима там нет, всегда :normal, Например. ты можешь

:'k,.norm ,cc

используя NerdCommenter для комментариев блока вместо отступов


Теперь, для удовольствия:

:'k,.>|'k,.retab|'k,.y+|u

Чтобы взять тот же блок, отступом, повторите его, поместите в буфер обмена Windows / X и отмените редактирование (это идеально подходит для вставки в StackOverflow). Обратите внимание, что на практике я предпочел бы использовать визуальный выбор для этого:

V'k:>|*retab|*y+|u

1 Справедливое предупреждение: некоторые «деструктивные» команды (такие как: delete или некоторые сопоставления из скриптов, например :norm ,cc чтобы прокомментировать выбор) на самом деле перемещать курсор


1