1
È possibile ottenere queste o migliori mappature dei comandi (mignolo) molto rapidamente. Non sto raccomandando questa soluzione, ma come esempio, se vuoi spostare il cursore all'inizio della riga con <C-a>
puoi eseguire la riga seguente dopo aver colpito :
dalla modalità normale (o aggiungere la linea al tuo VIMRC)
inoremap <C-a> <C-o>0
oppure, se l'inizio della riga indica il primo carattere non vuoto della riga
inoremap <C-a> <C-o>^
Curioso, ho appena testato queste mappature nel buffer in cui sto scrivendo questa risposta, e sono stato confuso per un momento perché non funzionavano. Poi mi sono reso conto di essermi dimenticato di entrare nella modalità di inserimento. Ti sembra difficile lasciare la modalità di inserimento per eseguire i normali comandi di modalità. Potresti scoprire dopo aver usato Vim per un po 'che è il contrario - che indugi nella modalità normale mentre stai pensando e fai solo escursioni per inserire la modalità per occasioni particolari. Vim vale probabilmente (o principalmente) la pena di apprendere se scopri che fai più modifiche che scrivere testo.
Quindi una parte di una risposta alla tua domanda sull'esecuzione rapida dei comandi in modalità normale dalla modalità inserimento è <C-o>
, che ti consente di lasciare temporaneamente la modalità inserimento per eseguire un comando in modalità normale, quindi rientrare. Leggilo a :help i_Ctrl-o
. Questo è utile per comodità una tantum. Un percorso più sostenibile è probabilmente quello di provare ad abbracciare la modalità normale come impostazione predefinita per la navigazione e la modifica e accedere alla modalità di inserimento solo quando si desidera inserire manualmente nuovi caratteri nel buffer.
2
I tuoi esempi sono molto generali, quindi è difficile dare risposte specifiche. Ho intenzione di fare un esempio specifico nella speranza che si adatti o sia traducibile in qualcosa che incontri. Per il tuo numero 1, dipende da come sai dove dovrebbe andare la parentesi di chiusura. diciamo che ho una linea come
let cchar = s:cchar["atx"]
Questo è pensato per essere una linea di VimL, il linguaggio di scripting di Vim, e (o qualcosa del genere) si verifica in un file di sintassi di Vim con cui attualmente non sono d'accordo. Diciamo che voglio cambiare la parte destra di questa espressione in una chiamata di funzione, forse perché la funzione fornisce valori predefiniti quando al dizionario s:cchar
non è stato ancora assegnato un valore per la "atx"
chiave. Con il mio cursore (in modalità normale) sul primo carattere, 'l', potrei digitare
f=wcf[MyFunction(<Esc>$r)
In breve, questo dice
f=
- forward to '=' (avrei potuto dirlo fs
, ma probabilmente non mi fermerei abbastanza a lungo per vedere che la 's' che voglio raggiungere è la prima s sulla linea, quindi sceglierei il personaggio che è ovviamente unico, e continua da lì)
w
- parola successiva, ora il mio cursore si trova sulla 's' di 's: cchar'
cf[
- passa a "["
a questo punto appare la linea
let cchar = |"atx"]
dov'è |
il cursore e io sono in modalità inserimento. Quindi digito MyFunction(
e lascio la modalità di inserimento ( <Esc>
).
$
- sposta il cursore alla fine della riga. Avrei potuto usare E
per la fine della parola grossa o f]
per l'inoltro a "]" o qualche altro movimento, ma $
prima mi venne in mente.
r)
- sostituisci il carattere sotto il cursore con un ')'
Ora ho cambiato l'espressione di assegnazione dall'assegnazione da un dizionario script-local all'utilizzo del valore restituito di una funzione, e così facendo ho introdotto le parentesi. Non so come appaia il tuo particolare bisogno di parentesi, forse è molto diverso, nel qual caso ci sarà una diversa serie di comandi per raggiungerlo. Se mi fermassi a pensare più a lungo al mio esempio inventato, potrei trovare anche modi più efficienti per raggiungere questo obiettivo, ma chi ha tempo di mettere in pausa e pensare.
(Provalo, copia-incolla (scusa, yank-put) il testo e il comando in un buffer, e con il cursore sul primo carattere, 'f', del comando colpito y$
. Ora il comando è nel tuo registro senza nome. Passa all'inizio della prima riga e premi :normal <C-r>"
su a) entra in modalità riga di comando, b) inizia a eseguire un comando in modalità normale dalla riga di comando, e c) incolla ( atchoo put) il registro senza nome nella riga di comando come normale comando mode da eseguire. L'unica cosa che devi modificare nel comando è sostituire la <Esc>
serie di caratteri fasulli (perché hai copiato atchoo dal tuo browser) con il codice chiave Escape reale, quindi cancellalo e premi <C-v>
e poi il tuo tasto Esc. Sembrerà un po 'come^[
. Ora premi Invio per eseguire il comando. Oppure ... basta digitare la stringa di tasti per testare i comandi, volevo solo mostrarti che puoi interagire con la modalità normale anche dalla modalità cmdline, e <C-v>
, e <C-r>
, e tutte le altre glorie del Paese delle Meraviglie. Inoltre, vedi :help Cmdline-mode
.)
3
Per cancellare una parola all'indietro puoi usare la mappatura standard <C-w>
(vedi :help i_Ctrl-w
). Non so se esiste una mappatura predefinita per eliminare una parola in avanti, ma suppongo che potresti farne una
inoremap <C-S-w> <C-o>dw
Ancora una volta, <C-o>
uscirà dalla modalità di inserimento per un comando una tantum e dw
"eliminerà" il movimento "parola". Vedi :help d
, :help w
. Se le parole in avanti che elimini non sono parole reali ma nomi class.function #, potresti voler usare W
(vedi :help W
). Se sei già in gran parte in modalità normale non hai bisogno di queste mappature, basta fare dw
, db
o con gli amici.
Alcuni aiutano i capitoli a guardare più da vicino
:help <C-o>
:help Insert
:help f
e le seguenti sezioni ( F
, t
, T
, ;
e ,
)
:help word-motions