Jak wyłączyć klawisze strzałek w vimie?

24

Chcę nauczyć się używania hjkl bardziej niż używania klawiszy strzałek, aby pozostać w głównym rzędzie. I tak, jestem bardzo świadomy, że nie należy używać hjkl jako głównych klawiszy nawigacyjnych. Jednak moje nawyki są dość silne i nawet nie zdaję sobie sprawy z tego, że wykonałem ten ruch ręką do klawiszy strzałek i chcę się tego nauczyć.

Aby przełamać ten nawyk: Jak mogę wyłączyć klawisze strzałek, aby zmusić mnie do korzystania z hjkl lub innej metody nawigacji?

Jako bonus byłoby pomocne, gdyby pojawił się komunikat, Dont't use this!że nie jest to obowiązkowe. Jeśli nie zadziałają, będzie to dla mnie wystarczająco mylące, aby przemyśleć swoje nawyki.

k0pernikus
źródło
4
Absolutnie nie ma sensu tego robić; HJKL ssą tyle co strzały.
romainl,
6
Myślę, że @romainl może wskazywać, że ważniejsze jest skupienie się na użyciu silnych ruchów vima (jak wdla następnego słowa, }dla następnego akapitu, ndla następnego dopasowania wyników wyszukiwania, fzdla następnego wystąpienia zw bieżącym wierszu itp.) Niż przenoszenie więcej szczegółowo według pojedynczych znaków. Zdecydowanie się z tym zgadzam. Jednak HJKL są zdecydowanie lepsze niż klawisze strzałek, ponieważ nie musisz ruszać rękami z rzędu domu. Często piszę coś takiego jA, co jest o wiele szybsze <Down>Ai nie do pokonania żadnym ruchem.
wchargin
4
@romainl: Myślę, że wcześniej rozmawiałem z tobą. Nie vimmery są używane do strzał, a nie do HJKL. Idealnie nie chcesz też używać; ale blokowanie strzałek (a nie HJKL) spowoduje, że ludzie zatrzymają się i zastanowią nad tym, co robią (jednocześnie pozostawiając HJKL otwarte jako alternatywę w przypadku, gdy jest to rzeczywiście najlepsza opcja lub jeśli użytkownik jest zaskoczony, jak to zrobić z mocniejsze ruchy). Tj. Nie chodzi o naukę HJKL, chodzi o blokowanie automatyzmu wyuczonego w innych edytorach.
Amadan,
1
@Carpetsmoker To, co zdecydowanie jest zaletą klawiszy hjkl, nie musi opuszczać domowego rzędu. W przypadku klawiszy strzałek ręka musi poruszać się po klawiaturze.
k0pernikus,
1
@Carpetsmoker Na pewno czuję się lepiej. ;)
k0pernikus,

Odpowiedzi:

24

Możesz zainstalować wtyczkę hardmode i .vimrcumieścić w swoim

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

Jeśli nie chcesz korzystać z wtyczki, użycie (co może być lepszym wyborem, jak dostać się dostosować wszystko samodzielnie!) nnoremap, vnoremapA inoremapna <Left>, <Right>, <Up>, <Down>, <PageUp>i <PageDown>, na przykład:

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>
Amadan
źródło
1
Jest też <nop>, jeśli chcesz wyłączyć całkowicie mapy klawiszy: nnoremap h <nop>.
akshay,
25

W przypadku, gdy ty lub ktoś inny czytający ten temat, po prostu chcesz wyłączyć ruchy klawiszy bez ostrzeżenia tekstowego, wprowadź następujące wiersze w .vimrc

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

Polecenia wyłączą ruch klawiszy tylko w trybie normalnym. Nadal działają w trybie wstawiania. Jeśli użyjesz inoremap, ruch strzałki również zostanie usunięty z trybu wstawiania.

Ten niezwykle popularny temat dotyczy różnic między noremap, nnoremap, inoremap itp .: Ponowne mapowanie w Vimie

Ogólny pomysł z mapowaniem wygląda następująco:

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

Tak więc w innych podanych przykładach ponownie przypisujesz lewe polecenie do monitu tekstowego, który przypadkowo usuwa akcję faktycznego przesunięcia kursora. Podany powyżej przykład po prostu odwzorowuje działania na nic, a nie na coś innego. Zastanów się nad usunięciem, a nie zastąpieniem funkcjonalności vima.

Beyer
źródło
2

Możesz dodać to do swojego, .vimrcaby wyłączyć klawisze strzałek w trybie Polecenia, Wstaw, Normalnym i Wizualnym:

" 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>

Uwaga: Kasa :help map-overviewpo więcej szczegółów na temat różnych rodzajów mapowania

Nieliniowe Owoce
źródło
1
Możesz zmniejszyć liczbę niezbędnych poleceń, używając noremap ... ...(dla trybu normalnego, wizualnego, wyboru i oczekiwania operatora) oraz noremap! ... ...(dla trybu wstawiania i wiersza poleceń).
Jürgen Krämer
Prawdziwe. Myślałem, że bardziej wyraźne noremapsbyłoby pomocne dla kogoś, kto chce dostosować, których trybów dotyczy
NonlinearFruit