Навігація в режимі вставки


20

Нарешті я вирішив відкинути клавіші зі стрілками для навігації на користь hjkl. Я використовував Vim hardmodeплагін для відключення клавіш зі стрілками.

Я звик до навігації досить швидко, але виявляється, що навігація в режимі вставки раптом неможлива.

Чи є для цього рішення? (існуючий режим вставки не є рішенням).


8
Так: використовуйте клавіші зі стрілками :-) Ось для чого вони там ;-)
Мартін Турной

@Carpetsmoker, якщо клавіші зі стрілками є, я б використовував їх замість hjkl ....
stdcall

5
Але ідея полягає у тому, що вихід із режиму вставки (а саме використання його саме для того, що він призначений, тобто невеликі вставки, що перемежовуються з іншими командами) саме є рішенням. Якщо я не помиляюся, я бачив це в довідці, якщо знайду посилання, я опублікую його. Здається, ви занадто сильно звикли до цього, а не до клавіш зі стрілками.
The Vee

Ви можете зв'язати клавіатуру, щоб використовувати стрілки як ярлик, як <kbd> super </kbd> + <kbd> j </kbd> для переміщення вниз. <kbd> super </kbd> може бути будь-якою кнопкою, наприклад, <kbd> Caps Lock </kbd> є досить поширеною
ivanjermakov

Відповіді:


26

Є багато варіантів. Один з варіантів, і IMO найбезпечнішим і найпростішим - просто припинити відключення клавіш зі стрілками. Я розумію, чому багато хардкорних виммерів говорять такі речі

Ніколи більше не слід використовувати клавіші зі стрілками! Кожного разу, коли ви використовуєте клавіші зі стрілками, ви витрачаєте 3 хвилини часу, цуценя гине і хтось переходить на Emacs!

(Очевидно, я жартую) Однак для клавіш зі стрілками є мета. Вони надзвичайно корисні для навігації:

  • У режимі вставки

  • У командному рядку

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

Варіант №2 полягає в повторному переробці, ctrl-hjklщоб діяти як клавіші курсору. Це приємно, тому що ви можете залишитися на дому, і він добре поєднується з м'язовою пам’яттю, яку ви вже навчились, використовуючи hjklв звичайному режимі. Насправді це я і роблю . Основним недоліком у цьому підході є те, що може бути больовим налаштування у терміналі vim, оскільки <C-j>виробляє NULбайт. Я долаю це, використовуючи Gvim. Мені невідомо, чи є легке виправлення vim для консолі чи ні.

Варіант №3 - використовувати <C-o>для здійснення невеликих рухів у звичайному режимі. Наприклад, якщо ви набираєте текст

Hello world!
     cursor^

і ви розумієте , що ви забули кому, а не робити leftleftleftleftleftleft, ви могли б просто зробити <C-o>b<C-o>hабо <C-o>2Fo, або будь-яку іншу комбінацію звичайних рухів режиму ви як.

Звичайно, ще один варіант, який мені дуже подобається - це просто використовувати Esc, зробити кілька невеликих рухів, перш ніж перейти назад до звичайного режиму. Ви згадали, що не хочете цього робити, але іноді це справді найефективніший спосіб.

Напевно, є й інші підходи, але саме такі, які мені подобаються, працювали на мене.


2
Цікаво - зауважу, ви використовуєте <c-o>gkі <c-o>gjзамість <Up>і <Down>. Чому так?
Кайл Странд

4
@kylestrand gkі gjвізуально йде вгору і вниз по лінії, навіть якщо лінія обмотана.
DJMcMayhem

4
Я не думаю, що цього достатньо, щоб відповісти на всі відповіді самостійно, але мені подобається, щоб клавіші зі стрілками були відключені у звичайному режимі (саме це змусило мене вивчити HJKL) та включити в усіх інших режимах ( noremap <Up> <NOP>...) . Ви витрачаєте достатньо часу в звичайному режимі, щоб вивчити HJKL, але вони є там, коли вам це потрібно. Або, принаймні, я вважаю, що це зручне середнє місце між тим, як залишати їх завжди вимкненими або завжди увімкнутими, і для цього не потрібно перезавантажувати інші клавіші (багато людей, як Ctrl-HJKL для переміщення між панелями).
Ітаї Фербер

Btw, BASH та ін підтримують основні прив'язки. За допомогою цих відображень ви можете <ESC> і використовувати hjkl, щоб пройти історію cmd (вгору / вниз) або змінити поточну команду (зліва / справа)
Rolf

9

Мені подобається використовувати клавішу Control, щоб перетворити hjklклавіші руху на «універсальні» клавіші руху. Ось відповідний біт мого .vimrc:

" In insert or command mode, move normally by using Ctrl
inoremap <C-h> <Left>
inoremap <C-j> <Down>
inoremap <C-k> <Up>
inoremap <C-l> <Right>
cnoremap <C-h> <Left>
cnoremap <C-j> <Down>
cnoremap <C-k> <Up>
cnoremap <C-l> <Right>

У inoremapместозаполнітель в режимі вставки, в той час як cnoremapті , застосовуються в командному режимі. (Я використовую це картографування так довго, що я забув, чи є спосіб переходити до історії командного режиму без нього.)

(Редагувати: я бачу, що інша відповідь вже згадувала про таку можливість. Але все-таки може бути корисним побачити фактичні команди відображення.)


3

Натисніть, escтоді використовуйте hjklта wWbBбудь-які інші навігації, які ви хочете зробити. Вся суть жорсткого режиму полягає в тому, щоб ви навчилися орієнтуватися з більш складними рухами vim. Зробіть невеликі зміни, потім перейдіть на нове місце, використовуючи звичайний режим.

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


3

Якщо ви хочете перемістити більше однієї або двох позицій ...

... найкращий вибір - натиснути ESC, переміститись та повернутися, щоб знову вставити режим.

Немає сенсу створювати відображення, як, наприклад, <C-h>рухатись ліворуч, а потім починати натискати на нього занадто багато разів ... як користувач vim, ви не повинні натискати на одну і ту ж клавішу кілька разів, щоб досягти розумного руху.

(Якщо ESCключ не наближається до ваших пальців, було б хорошим варіантом створити для нього картування.)

Якщо ви хочете перемістити одну або дві позиції у режимі вставки ...

... хорошим вибором буде визначити деякі рухи за допомогою вашого <Leader>ключа:

(Я використовую ,як <Leader>ключ, оскільки це відчувається близьким і зручним для моїх пальців)

noremap! <Leader>h <left>   "move cursor left
noremap! <Leader>j <down>   "move cursor down
noremap! <Leader>k <up>     "move cursor up   
noremap! <Leader>l <right>  "move cursor right
noremap! <Leader>w <esc>wi  "move one word forward
noremap! <Leader>e <esc>ei  "move forward to the end of word
noremap! <Leader>b <esc>bi  "move one word backward

1

Якщо вам просто потрібно змінити невелику кількість тексту чи слова, ви можете використовувати <Ctrl-O>h/j/k/l.

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

Посилання: 1. http://vim.wikia.com/wiki/Use_Ctrl-O_instead_of_Esc_in_insert_mode_mappings

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