Вкладка визуального выбора в VIM - PullRequest
25 голосов
/ 14 января 2009

Во многих графических интерфейсах, когда я выбираю фрагмент текста, а затем нажимаю кнопку Tab или Shift + Tab , выбранный раздел имеет отступ или нет.

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

Есть ли какой-либо способ вставлять и выводить материал в vim, сохраняя выбранный текущий выбранный текст?

Есть ли хитрость для повторного отображения Tab и Shift + Tab , чтобы они вели себя таким образом в визуальном режиме?

Ответы [ 9 ]

41 голосов
/ 14 января 2009

Вы можете префикс номера, т.е. «2>» для отступа двух табуляций. Или вы можете использовать «>» для отступа один раз, затем «.» сделать отступ снова (это работает, хотя блок больше не подсвечивается). Если вы зайдете слишком далеко, «u» будет отменять один шаг за раз.

Другая полезная команда - это «gv» для восстановления последнего визуального блока, если вам нужно применить другую команду.

33 голосов
/ 14 января 2009
vmap <Tab> >gv
vmap <S-Tab> <gv
5 голосов
/ 14 января 2009

Другой способ - выбрать блок и вставить отступ в начале строки, используя следующую последовательность:

  1. ctrl+V + клавиши со стрелками для выбора блока.
  2. I для переключения в режим вставки, так что вставленный текст вставляется в начале выделения в каждой строке в выбранном блоке.
  3. ctrl+T для увеличения отступа или ctrl+D для уменьшения отступа. Вы можете добавить любое количество отступов, как это. Примечание: Отступ будет виден только в первой строке блока, но при выходе из режима вставки отступ будет реплицироваться на все строки в блоке.
4 голосов
/ 12 марта 2009

Попробуйте использовать "." повторить команду. Он запоминает диапазон, и вы можете использовать «и», чтобы отменить один уровень, если вы идете слишком далеко. Конфигурация не требуется.

3 голосов
/ 16 апреля 2012

Следующая ключевая карта работает как решение Брайана, Но также сохраняйте позицию курсора, связанную со словом.

" tap indent movement (use mark `m' for cursor position)
vmap <S-Tab>  mm<`m:<C-U>exec "normal ".&shiftwidth."h"<CR>mmgv`m
vmap <Tab>    mm>`m:<C-U>exec "normal ".&shiftwidth."l"<CR>mmgv`m
3 голосов
/ 14 января 2009

Или, вы можете перейти к ближайшей фигурной скобке и набрать =% в обычном режиме - она ​​отступает блоку, покрытому фигурной скобкой, и соответствующему блоку. Но я не уверен, насколько это полезно в таких языках, как Python.

2 голосов
/ 17 июня 2016

С выбором визуального блока

Шаги:
Выберите блок ( Ctrl + v )
тип с (изменить)
введите необходимое пространство
тип esc

enter image description here

1 голос
/ 11 марта 2009

Попробуйте >} для 'отступа следующего абзаца на один уровень'.

0 голосов
/ 14 января 2009

Поскольку я отказался от vi в vim, я никогда не использовал> и <снова. Я использую автоматизированный отступ vim, который может быть явно запущен с = </p>

Очень хорошо работает с такими движениями, как = a {, который даже более эффективен, чем =%

В противном случае, если одного> недостаточно, просто переделайте его с помощью. Или отмените изменение с помощью u.

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