Як відключити клавіші зі стрілками в vim?


24

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

Щоб зламати цю звичку: Як я можу відключити клавіші зі стрілками, щоб я був змушений використовувати hjkl або якийсь інший метод навігації?

Як бонус, було б корисно, якби ще з’явилося повідомлення, Dont't use this!що це не є обов’язковим. Якщо вони не працюють, мені буде досить заплутано переосмислити свої звички.


4
Немає сенсу робити це; HJKL смокче так само, як і стріли.
romainl

6
Я думаю, що @romainl, можливо, вказує на те, що важливіше зосередитись на використанні потужних рухів vim (як, наприклад, wнаступне слово, }наступний абзац, nнаступний збіг результатів пошуку, fzнаступне виникнення zу поточному рядку тощо), ніж переміщення більше детально поодинокими символами. Я з цим безумовно згоден. Однак HJKL, безумовно, краще, ніж клавіші зі стрілками, тому що вам не потрібно рухати руками від домашнього ряду. Я часто набираю щось на кшталт jA, що набагато швидше <Down>Aі не дуже зручне будь-яким рухом.
wchargin

4
@romainl: Я думаю, я мав з вами цю дискусію раніше. Невіммери використовуються для стрілок, а не для HJKL. В ідеалі ви також не хочете використовувати жодне; але блокування стрілок (а не HJKL) змусить людей робити паузу та розмірковувати над тим, що вони роблять (поки все ще залишає HJKL відкритою як альтернативу на випадок, якщо це насправді найкращий варіант, або у випадку, якщо користувач наткнеться на те, як це зробити більш потужні рухи.). Тобто мова не йде про вивчення HJKL, а про блокування автоматизму, вивченого в інших редакторах.
Амадан

1
@Carpetsmoker Що, безумовно, перевершує клавіші hjkl - не потрібно залишати домашній ряд. Для клавіш зі стрілками рука повинна рухатися по клавіатурі.
k0pernikus

1
@Carpetsmoker Мені, безумовно, стає краще. ;)
k0pernikus

Відповіді:


24

Ви можете встановити hardmode плагін і в вашому .vimrcпроставлення

let g:HardMode_level = 'wannabe'
let g:HardMode_hardmodeMsg = 'Don''t use this!'
autocmd VimEnter,BufNewFile,BufReadPost * silent! call HardMode()

Якщо ви не хочете використовувати плагін, використання (який може бути кращим вибором, так як ви можете налаштувати всі самі!) nnoremap, vnoremapІ inoremapна <Left>, <Right>, <Up>, <Down>, <PageUp>і <PageDown>, наприклад:

nnoremap <Left> :echo "No left for you!"<CR>
vnoremap <Left> :<C-u>echo "No left for you!"<CR>
inoremap <Left> <C-o>:echo "No left for you!"<CR>

1
Там же , <nop>якщо ви хочете відключити розкладку взагалі: nnoremap h <nop>.
акшай

25

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

noremap <Up> <Nop>
noremap <Down> <Nop>
noremap <Left> <Nop>
noremap <Right> <Nop>

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

Ця масово популярна тема стосується відмінностей між noremap, nnoremap, inoremap тощо: Переробка в Vim

Загальна ідея з перестановкою йде так:

Choice-of-mode-to-remap <remap this command> <to this action/command instead>

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


2

Ви можете додати це до свого, .vimrcщоб відключити клавіші зі стрілками в режимі Command, Insert, Normal та Visual:

" Remove newbie crutches in Command Mode
cnoremap <Down> <Nop>
cnoremap <Left> <Nop>
cnoremap <Right> <Nop>
cnoremap <Up> <Nop>

" Remove newbie crutches in Insert Mode
inoremap <Down> <Nop>
inoremap <Left> <Nop>
inoremap <Right> <Nop>
inoremap <Up> <Nop>

" Remove newbie crutches in Normal Mode
nnoremap <Down> <Nop>
nnoremap <Left> <Nop>
nnoremap <Right> <Nop>
nnoremap <Up> <Nop>

" Remove newbie crutches in Visual Mode
vnoremap <Down> <Nop>
vnoremap <Left> <Nop>
vnoremap <Right> <Nop>
vnoremap <Up> <Nop>

Примітка. Отримайте замовлення, :help map-overviewщоб отримати докладніші відомості про різні види відображення


1
Можна зменшити кількість необхідних команд, використовуючи noremap ... ...(для звичайного, візуального, вибору та режиму очікування від оператора) та noremap! ... ...(для режиму вставки та командного рядка).
Юрген Крямер

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