Как использовать функцию отметки vim, но держать курсор там, где он есть - PullRequest
4 голосов
/ 18 декабря 2011

Функциональность пометки 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 ]

5 голосов
/ 18 декабря 2011

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

3 голосов
/ 18 декабря 2011

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

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

:map >> >'k''

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

1 голос
/ 18 декабря 2011

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

:'k,.>

Т.е., используйте команду командного режима с диапазоном (: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 Справедливое предупреждение: некоторые «деструктивные» команды (такие как: удаление или некоторые сопоставления из сценариев, такие как :norm ,cc, чтобы прокомментировать выбор) действительно перемещают курсор

1 голос
/ 18 декабря 2011

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

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

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

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

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