Esegui calcoli con il registro delle espressioni
È possibile eseguire calcoli sia in modalità normale che in modalità inserimento.
Modalità normale
In modalità normale, se si digita @=
il cursore si sposta sulla riga di comando, dove è possibile immettere qualsiasi espressione. Quando si preme invio, il risultato dell'espressione verrà eseguito come comandi in modalità normale.
Ad esempio, supponiamo di voler andare alla colonna centrale della riga corrente. La chiamata di funzione col('$')
restituisce il numero di colonne nella riga, quindi possiamo ottenere ciò digitando quanto segue:
@=col('$')/2<CR>|
Quando premi Invio, il cursore ritorna sul buffer e vim attende un operatore (come |
) come se tu avessi appena inserito un numero. In alternativa, avresti potuto inserire questo:
@=col('$')/2.'|'
... ma ovviamente sono più byte.
Modalità di inserimento
Puoi usare il registro delle espressioni anche in modalità insert, premendo <Ctrl-r>=
invece di @=
. Funziona allo stesso modo in modalità normale, tranne per il fatto che il risultato dell'espressione immessa verrà eseguito in modalità inserimento. Ad esempio, se hai digitato<Ctrl-r>=col('$')<CR>
, il numero di colonne nella riga corrente verrebbe inserito nel cursore come se lo avessi digitato.
Per ulteriori informazioni sul registro delle espressioni, digitare :help "=
.
Riutilizzo delle espressioni
L'ultima espressione è stato utilizzato viene memorizzato nel registro l'espressione, "=
. Digitando @=<CR>
in modalità normale o <Ctrl-r>=<CR>
in modalità inserimento si valuterà di nuovo l'espressione, permettendoti di usarli in modo molto simile alle macro.
Fare calcoli nelle sostituzioni
È possibile valutare le espressioni anche quando si effettuano sostituzioni di espressioni regolari. Tutto quello che devi fare è iniziare la sostituzione con \=
. Ad esempio, supponiamo di voler numerare le righe in questo file:
foo
bar
baz
La chiamata di funzione line('.')
restituisce il numero di linea corrente, quindi il lavoro è semplice. Inserendo questo:
:s/^/\=line('.').' '/g<CR>
... produce il risultato desiderato:
1 foo
2 bar
3 baz
Per utilizzare i gruppi acquisiti in una tale espressione è possibile utilizzare la submatch()
funzione, dove ad esempio submatch(0)
è equivalente a \0
una sostituzione ordinaria, submatch(1)
è equivalente a \1
, ecc. Questo purtroppo consuma molte sequenze di tasti.
Per ulteriori informazioni sulla sostituzione delle espressioni, digitare :help sub-replace-expression
.