Navigazione in modalità inserimento


20

Alla fine ho deciso di abbandonare i tasti freccia per la navigazione a favore di hjkl. Ho usato il Vim hardmodeplugin per disabilitare i tasti freccia.

Mi sono abituato alla navigazione abbastanza velocemente, ma risulta che la navigazione in modalità inserimento improvvisamente è impossibile.

C'è qualche soluzione per questo ? (la modalità di inserimento esistente non è una soluzione).


8
Sì: usa i tasti freccia :-) Ecco a cosa servono ;-)
Martin Tournoij,

@Carpetsmoker se i tasti freccia sono disponibili li userei invece di hjkl ....
stdcall

5
Ma l'idea è che uscire dalla modalità di inserimento (vale a dire, usarlo solo per quello per cui è inteso, cioè piccoli inserimenti intervallati da altri comandi) è esattamente la soluzione. Se non sbaglio l'ho visto nella guida, se trovo un link lo posterò. Sembra che ti sia abituato troppo, non ai tasti freccia.
The Vee,

Puoi associare la tastiera per utilizzare le frecce come scorciatoia come <kbd> super </kbd> + <kbd> j </kbd> per spostarti verso il basso. <kbd> super </kbd> può essere qualsiasi pulsante, ad esempio <kbd> Blocco maiuscole </kbd> è abbastanza comune
ivanjermakov

Risposte:


26

Ci sono molte opzioni che hai. Un'opzione, e IMO la più semplice e semplice è quella di smettere di disabilitare i tasti freccia. Capisco perché molti vibratori hardcore dicono cose del genere

Non dovresti mai più usare i tasti freccia! Ogni volta che usi i tasti freccia, perdi 3 minuti di tempo, un cucciolo muore e qualcuno passa a Emacs!

(Ovviamente sto scherzando) Tuttavia, c'è uno scopo per i tasti freccia. Sono estremamente utili per la navigazione:

  • In modalità inserimento

  • Nella riga di comando

Generalmente quando le persone ti dicono di non usare i tasti freccia, è perché vogliono che tu impari di nuovo la navigazione in un modo più simile a quello virtuale. Se ti senti a tuo agio hjkle utilizzi principalmente i tasti freccia in modalità inserimento, non c'è motivo di forzarti a non usarli.

L'opzione # 2 è di rimappare ctrl-hjklper agire come i tasti cursore. Questo è bello perché puoi rimanere in casa e si adatta bene alla memoria muscolare che hai già imparato usando hjklin modalità normale. In effetti, questo è quello che faccio . Il principale svantaggio di questo approccio è che in può essere una seccatura da configurare in terminal vim perché <C-j>produce un NULbyte. Mi aggiro usando Gvim. Non so se esiste una soluzione semplice per console vim o meno.

L'opzione n. 3 è da utilizzare <C-o>per eseguire piccoli movimenti in modalità normale. Ad esempio, se stai scrivendo

Hello world!
     cursor^

e ti rendi conto di aver dimenticato una virgola, piuttosto che fare leftleftleftleftleftleft, potresti semplicemente fare <C-o>b<C-o>ho <C-o>2Fo, o qualsiasi altra combinazione di movimenti in modalità normale che ti piace.

Naturalmente, un'altra opzione, e una che mi piace molto, è solo quella di usare Esc, fare alcuni piccoli movimenti prima di tornare alla modalità normale. Hai detto che preferiresti non farlo, ma a volte questo è davvero il modo più efficiente.

Probabilmente ci sono anche altri approcci, ma questi sono quelli che mi piacciono che hanno funzionato per me.


2
Interessante - noto che usi <c-o>gke <c-o>gjinvece di <Up>e <Down>. Perché?
Kyle Strand,

4
@kylestrand gke gjvai su e giù visivamente su una linea anche se la linea è chiusa.
DJMcMayhem

4
Non penso che questo sia sufficiente per giustificare una risposta da solo, ma mi piace avere i tasti freccia disabilitati in modalità normale (che è ciò che mi ha costretto a imparare HJKL) e abilitati in tutte le altre modalità ( noremap <Up> <NOP>...) . Trascorri abbastanza tempo in modalità normale per imparare l'HJKL, ma sono lì quando ne hai bisogno. O almeno, trovo che questa sia una comoda via di mezzo tra lasciarli sempre spenti o sempre accesi, e non richiede la rimappatura di altri tasti (molte persone come Ctrl-HJKL per spostarsi tra i riquadri).
Itai Ferber,

Btw, BASH e altri supportano le combinazioni di tasti vi. Con queste mappature, puoi <ESC> e usare hjkl per scorrere la cronologia cmd (su / giù) o modificare il comando corrente (sinistra / destra)
Rolf

9

Mi piace usare il tasto Control per trasformare i hjkltasti di movimento in tasti di movimento "universali". Ecco la parte rilevante del mio .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>

Le inoremapistruzioni si applicano alla modalità di inserimento, mentre cnoremapquelle alla modalità di comando. (Ho usato questa mappatura per così tanto tempo che ho dimenticato se c'è un modo per navigare nella cronologia della modalità di comando senza di essa.)

(Modifica: vedo che l'altra risposta ha già menzionato questa possibilità. Tuttavia, può essere utile vedere gli attuali comandi di mappatura.)


3

Hit escquindi utilizzare hjkled wWbBe qualsiasi altro navigazioni si vorrebbero fare. Il punto centrale della modalità difficile è farti imparare a navigare con movimenti vim più complessi. Apporta piccole modifiche, quindi spostati in una nuova posizione, utilizzando la modalità normale.

Se non vuoi imparare a navigare più velocemente con hardmode abilitato, controlla la mia risposta da un'altra domanda sullo stesso argomento.


3

Se vuoi spostare più di UNA o DUE posizioni ...

... la scelta migliore è quella di colpire ESC, spostarsi e tornare a inserire nuovamente la modalità.

Non ha senso creare mappature come <C-h>spostare a sinistra e poi iniziare a colpirlo troppe volte ... come utente vim non dovresti premere lo stesso tasto più volte per ottenere un movimento intelligente.

(Se il ESCtasto non è vicino alle dita, sarebbe una buona opzione creare un mapping per esso.)

Se vuoi spostare UNA o DUE posizioni in modalità inserimento ...

... una buona scelta sarebbe quella di definire alcuni movimenti usando la tua <Leader>chiave:

(Uso ,come <Leader>chiave poiché è vicino e comodo per le mie dita)

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

Se hai solo bisogno di modificare una piccola quantità di testo o una parola, puoi usare <Ctrl-O>h/j/k/l.

<Ctrl-O> ti riporta in modalità Normale solo per quel comando, e poi ti riporta in modalità inserimento, in modo da risparmiare un certo numero di pressioni di tasti, se è necessario passare alla modalità normale per un piccolo movimento.

Rif: 1. http://vim.wikia.com/wiki/Use_Ctrl-O_instead_of_Esc_in_insert_mode_mappings

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.