Come disabilitare i tasti freccia in vim?


24

Voglio insegnare a me stesso usando hjkl più che usare i tasti freccia per rimanere nella fila di casa. E sì, sono molto consapevole che non si dovrebbe usare hjkl come i principali tasti di navigazione. Eppure le mie abitudini sono piuttosto forti e non mi rendo nemmeno conto che ha fatto quel movimento della mano ai tasti freccia e voglio disimpararlo.

Al fine di rompere questa abitudine: come posso disabilitare i tasti freccia in modo da essere costretto a usare l'hijkl o qualche altro metodo di navigazione?

Come bonus, sarebbe utile se ci fosse ancora un messaggio mostrato Dont't use this!che non è obbligatorio. Se non funzionano, sarà abbastanza confuso per me ripensare le mie abitudini.


4
Non ha assolutamente senso farlo; HJKL succhia tanto quanto le frecce.
romainl

6
Penso che @romainl stia sottolineando che è più importante concentrarsi sull'uso dei potenti movimenti di vim (come wper la parola successiva, }per il prossimo paragrafo, nper la prossima corrispondenza dei risultati di ricerca, fzper la prossima occorrenza znella riga corrente, ecc.) Piuttosto che spostarsi di più granularmente da singoli personaggi. Sono assolutamente d'accordo con questo. Tuttavia, HJKL è decisamente migliore dei tasti freccia in quanto non è necessario spostare le mani dalla riga iniziale. Digiterò spesso qualcosa del genere jA, che è molto più veloce di <Down>A, e non realmente battibile da alcun movimento.
wchargin,

4
@romainl: Penso di aver avuto questa discussione con te prima. I non-vimmers sono usati per le frecce e non per HJKL. Idealmente non vuoi nemmeno usare; ma bloccare le frecce (e non HJKL) farà fermare le persone e riflettere su ciò che stanno facendo (pur mantenendo HJKL aperto come alternativa nel caso in cui sia effettivamente l'opzione migliore, o nel caso in cui l'utente sia sconcertato su come farlo con movimenti più potenti.). Cioè non si tratta di imparare HJKL, si tratta di bloccare l'automatismo appreso in altri editor.
Amadan,

1
@Carpetsmoker Quello che è sicuramente un lato positivo delle chiavi hjkl non è dover lasciare la fila di casa. Per i tasti freccia la mano deve spostarsi sulla tastiera.
k0pernikus,

1
@Carpetsmoker Mi sento sicuramente meglio. ;)
k0pernikus,

Risposte:


24

Puoi installare il plugin hardmode e nel tuo .vimrcput

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

Se non si desidera utilizzare un plugin, l'uso (che può essere una scelta migliore, come si arriva a personalizzare tutto da soli!) nnoremap, vnoremapE inoremapsu <Left>, <Right>, <Up>, <Down>, <PageUp>e <PageDown>, per esempio:

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
C'è anche <nop>, se si desidera disattivare la mappa della tastiera del tutto: nnoremap h <nop>.
akshay,

25

Nel caso in cui tu o qualcun altro leggiate questo argomento, volete semplicemente disabilitare i movimenti dei tasti senza l'avviso di testo inserite le seguenti righe in .vimrc

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

I comandi disabiliteranno il movimento dei tasti solo in modalità normale. Funzionano ancora in modalità inserimento. Se si utilizza inoremap, il movimento della freccia verrà rimosso anche dalla modalità di inserimento.

Questo argomento estremamente popolare riguarda le differenze tra noremap, nnoremap, inoremap ecc.: Rimappatura in Vim

L'idea generale di rimappatura è la seguente:

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

Quindi, negli altri esempi forniti, rimappa il comando sinistro su un prompt di testo che rimuove accidentalmente l'azione di spostare effettivamente il cursore. L'esempio che ho dato sopra rimappa semplicemente le azioni a nulla, piuttosto che a qualcos'altro. Consideralo come rimuovere, piuttosto che sostituire, la funzionalità vim.


2

Puoi aggiungere questo al tuo .vimrcper disabilitare i tasti freccia in Comando, Inserisci, Normale e Modalità visiva:

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

Nota: Checkout :help map-overviewper maggiori dettagli sui diversi tipi di mappatura


1
È possibile ridurre il numero di comandi necessari utilizzando noremap ... ...(per la modalità normale, visiva, di selezione e in attesa dell'operatore) e noremap! ... ...(per la modalità di inserimento e riga di comando).
Jürgen Krämer,

Vero. Ho pensato che il più esplicito noremapssarebbe utile per qualcuno che desidera personalizzare le modalità interessate
NonlinearFruit
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.