Сверхбыстрая навигация VIM

91

Единственное, чего мне не хватает в использовании других редакторов, так это нахождения своего места с помощью мыши. Я могу смотреть глазами в определенную область файла, движением мыши и щелчком я оказываюсь там. С VIM мне нужно jjjjjkkkkkjjjjhhhh ... почти там, ххххх, дерьмо, я пропустил 3 символа, lll.

Я учусь делать отметки, и я нашел отличный плагин закладок, я могу создавать маркеры, уничтожать их <f3>и переходить к ним, но, к сожалению, отметки забываются при закрытии файла.

Как у вас все супер-навигация по файлам? Я знаю, что могу также сделать 5j7k4j5h и так далее, но должен быть плагин, который может читать мои глаза и помещать курсор там, где мне это действительно нужно.

Я также научился использовать /% для поиска определенного термина. Это действительно помогает, но все совпадающие символы выделены в документе.

Гельмут Гранда
источник
Отличные ответы, пока мы все еще обсуждаем эту тему, я решил, что могу поэкспериментировать с чем-то вроде nG (перейти к номеру строки) f% (найти первый символ того, что я ищу, или, как кто-то предложил, использовать w для продвижения вперед к следующему слову
Helmut Granda

Ответы:

173

Попробуйте $ vimtutor, он научит вас всему, что вам нужно знать, чтобы начать работу.

hjkl являются вершиной айсберга и используются очень редко, по крайней мере, в моем случае.

wWEeи BbgegEвсе позволяют перемещаться слово за словом:

  • wи eидти вперед, Wи Eпринимать пробелы и знаки препинания во внимание

    " here the * marks the default location of the cursor
    " and each letter shows where you jump when you hit the key.
    
    Latin: Lorem ipsum dolor sit amet.
                       *   e   e    e
                       *   E   E     E
    *    w w     w     w     w   w   w
    *      W     W     W     W   W   W
    
  • bи geидти в обратном направлении, Bи gEпринимать пробелы и знаки препинания во внимание

    Latin: Lorem ipsum dolor sit amet.
    b    b b     b     *
    B      B     B     *
         ge    ge    ge*
        ge
         gE    gE    gE*
    

fFtTиспользуются для достижения определенного символа в текущей строке и ;,используются для повторения этого движения в том же направлении ;и в противоположном направлении для ,:

  • fmпрыгает на следующий mвперед, Fидет назад

    Latin: Lorem ipsum dolor sit amet.
    *          fm    ;            ;
               ;     Fm          *
    
  • tmпрыгает ПЕРЕД следующим mвперед, Tидет назад

    Latin: Lorem ipsum dolor sit amet.
    *         tm    ;            ;
              ;     Tm           *
    

/? используются для перехода к первому вхождению шаблона из текущей позиции курсора:

  • /pattern идет вперед

    Latin: Lorem ipsum dolor sit amet.
    *            /ips
    
  • ?pattern идет назад

    Latin: Lorem ipsum dolor sit amet.
    ?Lat             *
    

0$ используются для перехода к первому и последнему символу строки.

    (whitespace)Latin: Lorem ipsum dolor sit amet.(whitespace)
    0                  *                                     $

^g_ используются для перехода к первому и последнему печатаемому символу строки.

    (whitespace)Latin: Lorem ipsum dolor sit amet.(whitespace)
                ^      *                         g_

Одиночный и комбинированный ()[]{}используются для перемещения фраза за фразой, абзаца за абзацем или блока кода за блоком кода.

<C-b> а также <C-f> используются для прокрутки экрана вперед и назад.

<C-u> а также <C-d> используются для прокрутки на половину экрана вперед и назад.

H, MиL переместите курсор в верхнюю, среднюю и нижнюю часть окна просмотра соответственно.

zt, zzиzb переместите линию под курсором в верхнюю, среднюю и нижнюю часть окна просмотра соответственно.

И так далее.

:help motion.txt взорвет ваш ум.

Ромэн
источник
17
Обычно я этого не делаю, но этот комментарий должен сказать вам, что это отличный ответ!
jojo
По какой-то причине я никогда раньше не использовал H, M или L, отличные подсказки!
Крис
Добавление этого ]}и [{(2 нажатия клавиши) переход к концу или началу области видимости (например, определенной{ ... }
Мэтью Ву
3
Ну, это все еще не отвечает на вопрос OP how to jump to a line he's seeing like using a mouse. Я знаю и использую все привязки клавиш, которые вы упоминали все время. Но это все еще не так эффективно, как наведение мыши при прыжке на большое расстояние.
Penghe Geng
да, H, M, L легко запомнить: High, Middle, Low;) @Chris
nils petersohn
25

Помимо команды движения vim, я считаю, что плагин vim под названием EasyMotion очень полезен для навигации. Если вы знакомы с vimperator или pentadactyl, EasyMotion просто вернет режим подсказок в vim. здесь есть анимированные демо и здесь есть видео - учебник. Надеюсь, это поможет вам.

Винсент
источник
Преимущество easymotion в том, что вы можете перейти в любое место на экране всего за 3 нажатия клавиши.
Xavier T.
+1: EasyMotion - действительно реактивный ранец движения Vim. (кстати, PreciseJump тоже. На самом деле EasyMotion - сын PreciseJump)
Дмитрий Франк
2
Как, черт возьми, автору EasyMotion удалось получить эту супер-классную строку статуса в демоверсии?
Cyrille
1
«Супер классная строка состояния» - это плагин под названием «Powerline». Его здесь: vim.org/scripts/script.php?script_id=3881
DEzra
не могли бы вы обновить URL-адрес анимированной демонстрации? он больше не работает
brauliobo
20

В vim есть миллионы способов передвижения, это одна из его действительно сильных сторон. Я использую {и }много, которые перемещаются вверх и вниз к следующей пустой строке в этом направлении. %полезен для перехода назад и вперед к подходящей скобке (любого вида). Wи Bдвигаться вперед и назад на «слово».

Возможно, стоит просмотреть раздел « Перемещение » в руководстве по Vim.

Грег Хьюгилл
источник
4
Вероятно, также стоит упомянуть перелистывание вверх и вниз с помощью Ctrl + U и Ctl + D соответственно.
Ник
10

vim поддерживает мышь! попробуйте (в вашем .vimrc):

set mouse=a

примечание : как пользователь экрана я обнаружил, что мне также нужно

set ttymouse=xterm2

чтобы это работало.

rgcb
источник
4
Полезно знать, однако я продолжу поиски идеальной быстрой навигации без использования мыши.
Helmut Granda
9

лично я предпочитаю использовать:

"/<chars><enter>" to quickly move to somewhere   ( extremely fast! trust me! )
":<number>" to go to some line, 
"ctrl + f/b" to forward/back
"g;" to move to the last editing place.
"w/b" to move by word
"jklh" to move your cursor to the exact position
Сивэй Шэнь 申思维
источник
5

С помощью опции relativenumber( : help relativenumber - входит в состав Vim 7.3 ) вы можете добраться до линии под вашими глазами с помощью движения a [count]kили [count]j, что позволяет вам перемещаться в текущей строке с помощью движений, ftwebкак описано в @romainl.

мМонту
источник
Отличный вариант. Быстрее, чем easymotion.
Penghe Geng
5

Помимо {, }, (, ), <number>cb, <number>cB, <number>cWи %, я использую такие методы , навигационные:

  • ciw, diw( ciW, diW). и т. д. для быстрого редактирования / удаления слова под курсором (включая непробельные символы)
  • ci(, ci"( ca(, ca") и т. д. для быстрого редактирования внутри скобок, кавычек (включая скобки, кавычки). То же самое касается d.
  • Помечает ЗАГЛАВНЫМИ буквами, чтобы установить их глобально (по файлам) и постоянно (когда буфер закрыт). Например, mAсоздаст глобальную метку, Aкоторая будет доступна с 'Aкомандой (или`A с учетом столбца).
  • gf быстро перейти к файлу под курсором
  • f, t( F, T) для перехода к символу, перед символом вправо (влево) (используйте ;для повторения). Они особенно полезны для dи cкоманд (использование .повторить).
  • ^]перейти к тегу и ^Tвернуться.

И множество других способов передвижения :)

Посетите это для получения дополнительной информации: http://www.thegeekstuff.com/2009/03/8-essential-vim-editor-navigation-fundamentals/

PS Для пользователей rails есть очень полезный плагин rails-vim, вы тоже можете попробовать его.

Пеньковский
источник
3

это хорошее место для изучения основных навигационных команд, часть мощности / скорости vim зависит от комбинации движения с действием, то есть cw-> изменить слово, d10j-> удалить 10 строк вниз и т. д. Также это и это интересно читать.

TI
источник
2

Вы можете :set nohlsearchотключить выделение ваших символов поиска.

Я тоже много использую ctags.

рико
источник
github.com/richoH/dotfiles/blob/master/vimrc Там вы можете найти и другие полезные вещи.
richo 06
Спасибо за совет, я просматривал ваш vimrc и нашел вашу заметку, в которой вы установили выделение строки, когда вы набираете 80 символов при написании электронных писем или документов. Зачем писать электронное письмо в VIM? Я понимаю документ для вашего личного использования, но не уверен насчет электронной почты.
Helmut Granda
Я использую mutt + vim для чтения и написания большей части моей электронной почты. Я также использую плагин для всего текста, чтобы писать много веб-контента в vim. У меня включен перенос слов для электронных писем, но для ссылок и т. Д. Может быть полезно иметь напоминание, если я неправильно отформатировал или если вложенные кавычки становятся слишком длинными.
richo 08
0

Я написал плагин для сверхбыстрой навигации, он называется move -less:

https://github.com/anschnapp/move-less

Это позволяет вам удобно искать файл с отверстиями, прокручивая ( h j k l-клавиши). Вы не меняете положение курсора во время прокрутки отверстия (на основе трюка со складыванием). Если вы прервете поиск, вы окажетесь там, где начали.

Для сверхбыстрой навигации цель состоит в том, чтобы использовать мой плагин, чтобы получить целевую позицию на экране, а затем перейти в нужное положение с помощью easymotion (что уже рекомендовалось из другого ответа):

https://github.com/easymotion/vim-easymotion

Если вы объедините и то, и другое, то сможете даже продвинуться вперед в истории переходов и можете переключаться между исходной и целевой точкой просто с помощью <c-o>и <c-i>.

щелчок
источник