Vim sposta il cursore di un carattere in modalità inserimento senza i tasti freccia


9

Questo potrebbe sembrare un po 'troppo esagerato, ma sono passato a Vim e sono così felice del flusso di lavoro ora. Cerco di disciplinarmi per non usare i tasti freccia, poiché tenere sempre le mani sui tasti alfa è una cosa così grande quando si scrive. Quindi, quando devo navigare, esco dalla modalità di inserimento, mi sposto in modalità normale e torno in modalità di inserimento.

C'è un'eccezione in cui questo è in realtà più sconvolgente: io uso clang completecon frammenti e super tabche è fantastico. Tranne ogni volta che ottengo il completamento automatico di una funzione dopo aver inserito i parametri che mi rimangono prima con il cursore, )quindi per continuare devo spostare il cursore di un carattere a destra. Come puoi immaginare, succede molto spesso .

Le uniche opzioni che ho (per quanto ne so) sono: Esclao , e non sono contento di nessuno dei due. Il primo mi fa colpire 3 tasti per una semplice mossa del cursore di 1 carattere, il secondo mi fa muovere la mano sui tasti freccia. Una terza opzione sarebbe quella di mappare CTRL-Lo smth a .

Qual è il modo migliore per farlo?


//snippets (clang complete + supertab):
foo($`param1`, $`param2`)

//after completion:
foo(var1, var2|)
              ^ ^
              | |
     I am here  |
                 Need to be here

| indica la posizione del cursore


Con un problema simile, ho finito per hackerare lo script di completamento in modo da non far eco alla chiusura )se c'è almeno un argomento nella funzione. Quindi lo scrivo a mano. Molto più utile ora.
Dmitry Frank,

Cosa succede quando digiti )Scommetto che salta senza effettivamente inserire. (Non utilizzo questo plugin)
FDinoff,

@FDinoff no, ne inserisce solo un altro)
bolov

1
@bolov è deludente. Potresti essere in grado di estrarre il codice che lo fa dalle coppie automatiche . Non ho idea se i plugin potrebbero essere in conflitto. L'altra opzione è usare <C-O>lper uscire dalla modalità normale per 1 comando in modalità normale.
FDinoff,

Risposte:


5

Mappa )per saltare l'exititing )se si tratta di una parentesi di chiusura

inoremap <expr> )  strpart(getline('.'), col('.')-1, 1) == ")" ? "\<Right>" : ")"

Tratto da: http://vim.wikia.com/wiki/Automatically_append_closing_characters


Vecchia risposta

:h i_CTRL-O eseguire un comando, tornare alla modalità Inserisci.

Ctrl-ol ti sposterà di un carattere a destra, quindi ti riporterà in modalità inserimento.

In alternativa, alcuni dei plugin di parentesi consentono di digitare semplicemente la parentesi di chiusura )e sostituiranno quella esistente.


1
questo non funziona se )è l'ultimo carattere sulla riga (e questo accade spesso mentre scrivi il codice). CTRL-O atuttavia funziona. Quindi immagino che abbiamo salvato una chiave. :)
bolov,

Vero del )è solo due personaggi e ti metterà sempre dopo la parentesi di chiusura.
Brett Y

saltare il ')' funziona come un incantesimo, grazie
bolov

1

Digitare quanto segue per trovare i tasti di controllo utilizzati nella modalità di inserimento.

:help insert-index

ctrl-b non viene utilizzato, ma potresti voler sacrificare qualche altro tasto.

imap <c-b> <right>

Questo funziona per spostare il cursore a destra di un carattere. O mappa qualche doppio carattere.

imap jj <right>
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.