Супер швидка навігація VIM


91

Єдине, чого мені не вистачає у використанні інших редакторів, так це пошуку місця за допомогою миші. Я можу дивитись очима на певну область у файлі, і рухом миші та клацанням я перебуваю там. З VIM мені доводиться jjjjjkkkkkkjjjjhhhh ... майже там hhhhh ой лайно я пропустив 3 символи, lll.

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

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

Я також навчився використовувати /% для пошуку за певним терміном. Це допомагає, але всі відповідні символи виділяються в документі.


Чудові відповіді на всі, поки ми все ще розглядаємо тему, я зрозумів, що можу експериментувати з чимось на кшталт nG (перейти до рядка Number) f% (знайти перший символ того, що я шукаю, або як хтось запропонував використовувати w для руху вперед до наступного слова
Гельмут Гранда,

Відповіді:


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 натискання клавіш) перейти до кінця або початку області (наприклад, тієї, що визначена{ ... }
Matthew Woo

3
Ну, це все ще насправді не відповідає на питання OP how to jump to a line he's seeing like using a mouse. Я знаю і використовую всі прив’язки клавіш, про які ви постійно згадували. Але це все ще не настільки ефективно, як наведення миші при стрибках на велику відстань.
Penghe Geng

так H, M, L легко згадати: Високий, Середній, Низький;) @Chris
nils petersohn

25

крім команди руху vim, я вважаю, що плагін vim з назвою EasyMotion дуже корисний для навігації, якщо ви знайомі з vimperator або пентадактилом, EasyMotion просто поверне режим підказки у vim. ось анімована демонстрація, а ось відеоурок. Сподіваюся, це корисно для вас.


Перевага easymotion полягає в тому, що ви можете перейти куди завгодно на екрані лише за допомогою 3 натискань клавіш.
Xavier T.

+1: EasyMotion - справді реактивний ранець руху Віма. (до речі, PreciseJump теж. Насправді EasyMotion - син PreciseJump)
Дмитро Франк

2
Як, блін, автор EasyMotion отримав цей надзвичайно чудовий рядок стану в демонстрації?
Кирилл

1
"Супер дивовижний рядок стану" - це плагін під назвою "Powerline". Його тут: vim.org/scripts/script.php?script_id=3881
DEzra

не могли б ви оновити анімований демонстраційний url? це вже не працює
брауліобо

20

Існує мільйон способів пересуватися у vim, це одна з його справді сильних сфер. Я використовую {і }багато, які рухаються вгору і вниз до наступного порожнього рядка в цьому напрямку. %корисний для переміщення вперед-назад до відповідного кронштейна (будь-якого виду). WіB рухатися вперед і назад на "слово".

Можливо, варто переглянути розділ Переміщення в посібнику Vim.


4
Ймовірно, також варто згадати про підкачування вгору та вниз за допомогою Ctl + U та Ctl + D відповідно.
Нік

10

vim має підтримку миші! спробуйте це (у вашому .vimrc):

set mouse=a

sidenote : як користувач екрану, я виявив, що мені теж потрібно

set ttymouse=xterm2

щоб це працювало.


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-vim, можливо, ви захочете його також перевірити.


3

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


2

Ви можете :set nohlsearchвимкнути виділення пошукових символів.

Я також багато орієнтуюся за допомогою ctags.


github.com/richoH/dotfiles/blob/master/vimrc Ви можете знайти там деякі інші корисні речі.
Річо

Дякую за підказку, я переглянув ваш vimrc і знайшов вашу примітку, де ви встановили виділення рядка, коли досягаєте 80 символів під час написання електронних листів чи документів. Чому б вам писати електронний лист у VIM? Я можу зрозуміти документ для вашого особистого користування, але не впевнений щодо електронної пошти.
Helmut Granda

Я використовую mutt + vim для читання та написання переважної більшості електронної пошти. Я також використовую плагін it all text, щоб писати багато веб-вмісту у vim. У мене включено перенесення слів для електронних листів, але для посилань тощо може бути корисним нагадування, якщо я не правильно відформатував або якщо вкладені лапки стають занадто довгими.
Річо

0

Я написав плагін, маючи на увазі надшвидку навігацію, він називається без руху:

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

Це дозволить вам зручно шукати файл дірок, прокручуючи за допомогою ( h j k l-key). Ви не змінюєте положення курсора під час прокрутки місця отвору (на основі фокусу, що складається). Якщо ви скасуєте пошук, ви з самого початку.

Для супершвидкої навігації інтенція полягає у використанні мого плагіна, щоб отримати цільову позицію на екрані, а потім перейти в потрібне положення за допомогою easymotion (що вже було рекомендовано з іншої відповіді):

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

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.