Перемещение (эффективно) вертикально в Vim

27

Когда я хочу добраться до определенной части слова в Vim (по горизонтали), я просто нажимаю w, b, f или t (что-то). Есть ли хороший способ сделать это по вертикали? Например, я хочу получить определенное слово или букву строки, которая находится ниже или выше строки, в которой я сейчас нахожусь.

PS: без использования: (номер строки)

janoChen
источник

Ответы:

29

H, MИ Lпереместит курсор в верхней, средней и нижней части экрана, соответственно. Впоследствии вы можете нажать, zzчтобы отцентрировать экран на строке, на которой находится курсор.

Элисон Р.
источник
5
И zb и zt перемещают экран внизу и вверху соответственно
Яни Хартикайнен
11
  • Вы можете использовать стрелки вверх / вниз для перемещения на одну строку
  • Вы можете ввести число, а затем использовать стрелки вверх / вниз для перемещения вверх / вниз на столько строк
  • небольшие gпереходы на первую строку документа
  • капитал Gпереходит на последнюю строку документа
  • и т.п.

Есть множество других способов, vim очень гибок в этом отношении. Я бы порекомендовал сначала получить чит-лист vim для основных команд, а затем, когда у вас есть время, просмотреть документацию vim на эту тему.

Ссылка на один шпаргалку: шпаргалка

Также:

  • /+ строка + (Enter)ищет следующее вхождение строки от курсора вперед до конца документа
  • ? - делает то же самое, но от курсора назад к началу документа

источник
6

Я прыгаю в поисках уникальных струн, куда я хочу пойти. В Vim вы можете сделать это с:

/ Поиск строка

Обычно я прокручиваю вперёд и назад, используя n и N, как только я ввёл поиск.

Я также прокручиваю, используя Ctrl-F и Ctrl-B, чтобы быстро пролистать код. Но я использую поисковый прием чаще всего. Иногда вы можете потеряться при просмотре результатов поиска с n и N. Хорошая команда для ориентации - Ctrl-G, которая выводит что-то вроде этого в нижней части экрана Vim:

"script.pl" строка 219 из 328 --66% - столбец 19-23

Джеймс Томпсон
источник
+1 для <CTRL> -F и <CTRL> -B, хотя я склонен «обманывать» и использовать <PgUp> и <PgDown> почти так же часто!
техно-логическое
4

попробуй: он motion.txt и: он вверх-вниз-движения

У этого есть весь список возможных движений вверх

Майкл
источник
3

Вы также можете выполнить переход к определенной строке в документе, введя Ngg, где Nнаходится номер строки, которую вы хотите перейти.

mloskot
источник
1
Вы имеете в виду NG...
Питер
1
Я Nggтоже пользуюсь (оба варианта работают)
soulmerge
1
А также:N
viraptor
3

Вам следует попробовать подключаемый модуль easymotion от Lokaltog : http://www.vim.org/scripts/script.php?script_id=3526

Плагин Easymotion на работе

f3lix
источник
easymotion действительно хорошо, но я не знаю, почему он работает для части над курсором. Он выделяет только тот, который находится под курсором.
nXqd
2

как уже упоминалось ранее H, M, L (как в верхнем, среднем, нижнем) нижнем регистре hjkl - это типичные команды консоли игры для левого, нижнего, верхнего, правого и работают одинаково в vi (j, k работают в gmail, если вы включите ключевые команды)


источник
1

<Ctrl>+D - вниз

<Ctrl>+U - вверх

SML
источник
Это половина страницы прокрутки. Для полной прокрутки страницы используйте <c-f>и<c-b>
Al.G.
1

В дополнение к обычным вертикальным движениям я использую модифицированную версию /programming/4946421/vim-moving-with-hjkl-in-long-lines-screen-lines . Я обычно двигаюсь с помощью клавиш со стрелками, а не hjkl (долгое время пользователь других редакторов, прежде чем я нашел Vim, также использовал стрелки / Home / end / PgUp / PgDn для переключения, даже после 5+ лет эксклюзивного использования Vim).

function! ScreenMovement(movement)
   if &wrap
      return "g" . a:movement
   else
      return a:movement
   endif
endfunction
map <expr> <C-Down> ScreenMovement("j")
map <expr> <C-Up> ScreenMovement("k")
map <expr> <C-Home> ScreenMovement("0")
map <expr> <C-End> ScreenMovement("$")

Удерживая Ctrl, я могу перейти к началу / концу или вверх / вниз отображаемых строк. Для меня это более эффективно, чем альтернативы, по крайней мере.

Почти забыл: мне нужно было изменить .Xdefaults для того, чтобы он работал конкретно в urxvt, но это, вероятно, не по теме (с ответами в Google).

Даниэль Андерссон
источник