Come posso specificare "la parola sotto il cursore" sulla riga di comando di VIM?

StackOverflow https://stackoverflow.com/questions/48642

  •  09-06-2019
  •  | 
  •  

Domanda

Voglio scrivere un comando che specifichi "la parola sotto il cursore" in VIM.Ad esempio, diciamo che ho il cursore su una parola e la faccio apparire due volte.Ad esempio, se la parola è "abc" e voglio "abcabc", potrei digitare:

:s/\(abc\)/\1\1/

Ma poi mi piacerebbe poter spostare il cursore su "def" e usare lo stesso comando per cambiarlo in "defdef":

:s/\(def\)/\1\1/

Come posso scrivere il comando nella riga di comando in modo che lo faccia?

:s/\(*whatever is under the commandline*\)/\1\1
È stato utile?

Soluzione

<cword> è la parola sotto il cursore (:help <cword>).

Scusa, avrei dovuto essere più completo nella risposta.

Puoi nmap un comando ad esso, oppure questa serie di tasti per i più pigri funzionerà:

b #go to beginning of current word
yw #yank to register

Quindi, quando stai digitando il tuo pattern puoi premere <control-r>0<enter> che incollerà nel tuo comando il contenuto del registro 0-esimo.

Puoi anche creare un comando per questo come:

:nmap <leader>w :s/\(<c-r>=expand("<cword>")<cr>\)/

Che mapperà premendo "\" e "w" contemporaneamente per sostituire la riga di comando

:s/\(<currentword>\)/

Altri suggerimenti

In modalità riga di comando, CTRL+R CTRL+W inserirà la parola sotto il cursore.

Consulta la guida per c_CTRL-R per l'elenco di tutti gli altri registri speciali:

:help c_CTRL-R
yiwP

yiw:Yank parola interna (la parola sotto il cursore).Questo comando sposta anche il cursore all'inizio della parola.

P:Incolla prima del cursore.

È quindi possibile mappare ad esempio: < ALT > - D a questo comando:

:nmap < ALT >-D yiwP

Un altro modo semplice per farlo è usare il file * comando.

Nella modalità normale, una volta terminata una parola, digita

*:s//\0\0<Enter>

* rende il modello di ricerca la parola corrente (ad es.\<abc\>).

:s// esegue una sostituzione utilizzando il modello di ricerca corrente e \0 Nella sezione di sostituzione è la stringa abbinata.

È quindi possibile ripetere questo comportamento, ad esempio sulla parola "def", digitando nuovamente lo stesso oppure digitando

*@:

@: ripete semplicemente l'ultimo comando ex, senza bisogno di <Invio>, in questo caso la sostituzione.

Puoi anche registrare una macro veloce per farlo usando il file q comando

qd*:s//\0\0<Enter>q

Quindi ripetilo a tuo piacimento digitando

@d

quando su una parola vuoi raddoppiare.Poiché questo è solo un carattere in meno rispetto alla soluzione precedente, potrebbe non valerne la pena, a meno che tu non esegua altri ex comandi tra il raddoppio delle parole, che cambierebbero il comportamento di @:

È necessario evitare le barre rovesciate all'interno della mappatura.È inoltre possibile includere la stringa di sostituzione all'interno della mappatura.

:nmap <leader>w :s/\\(<c-r>=expand("<cword>")<cr>\\)/\\1\\1<cr>
ywPx

farà quello che descrivi.

ywPxw

farà avanzare anche il cursore alla parola successiva.

@utente11211 ha il modo più semplice per duplicare la parola sotto il cursore:

yiwP

strappa la parola interna (sposta il cursore all'inizio della parola), incolla (prima del cursore).

per esempio.diretto[t]avanti ----> direttoguerra[d]diretto

[] è il cursore

Elaborare...

Probabilmente vorrai che il cursore segua la tua parola duplicata:

yiwPea

semplice[t]avanti ----> semplicesemplice[]

NOTA:

yiw

è una parola interna strappata (senza spazi bianchi)

yaw

è strappare tutte le parole (inclusi gli spazi bianchi finali).

yawPea

è quindi una parola duplicata che include spazi bianchi e cursore di posizione.

dritto[t]avanti ----> semplice semplice[]

" count word  (case sensitive)
nmap <F4> :%s/\(<c-r>=expand("<cword>")<cr>\)//gn<cr>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top