ottimizza il surround con virgolette

Dec 22 2020

Voglio racchiudere una parola tra virgolette

Ecco il mio set di comandi:

  • ciw
  • poi quando sono in modalità di inserimento, digito '(uso l'
    estensione vim su Visual code quindi ne ottengo due 'non so se è il caso di vim "normale")
  • quindi Ctrl+ C+t
  • poi p

Funziona, ma potrebbe esserci una versione più breve per raggiungere questo obiettivo. Potresti aiutare ?

Risposte

2 Macunaíma Dec 22 2020 at 20:54

Puoi provare il plugin vim-surround . Per mettere una parola tra virgolette andrai ysiw'. Il plugin ti dà il potere di:

  • aggiungi ( ysiw")

    word -> "word"
    
  • cambiare ( csiw"')

    'word'
    
  • cancella ( ds')

    word
    

l'ambiente circostante non solo di singole parole ma di tutti i tipi di oggetti di testo:

  • racchiudere le parole tra parentesi ( ysi)")

    def func(some sequence of words) -> def func("some sequence of words")
    
  • cambia le parentesi in parentesi quadre ( cs)])

    list = (var1, var2, var3) -> list = [var1, var2, var3] 
    
2 BLayer Dec 22 2020 at 20:43

Se stai utilizzando l'estensione VS Code che penso tu sia, la mia comprensione è che supporta almeno alcuni plugin e uno di questi è vim-surround . Se questo è il caso e sei aperto all'utilizzo dei plugin, vai all'ultimo paragrafo. Altrimenti, continua a leggere.

Dalla modalità Normale con il cursore sul primo carattere della parola potresti fare ...

i"<C-O>f<Space>"<Esc>

Ctrl-O, da Inserisci, consente di immettere un comando in modalità normale prima di tornare a Inserisci.

f<Space> va al carattere spazio successivo sulla riga (dopo la parola).

Il problema con questo è se la parola non è seguita da uno spazio (ad esempio, sei alla fine della riga o è seguito da un segno di punteggiatura). Dovresti regolare il comando della modalità Normale (ad esempio su f.o $<Left>).

Questo è solo un esempio di come ottenere ciò, ma penso che piuttosto che provare a ottimizzare un comando manuale dovresti usare qualcosa di più robusto (ma complicato) e inserirlo in una mappatura. Ad esempio questo comando di sostituzione:

:%s/\<\w*\%#\w*\>/"&"

Questo dice che prendi la posizione del cursore ( \%#) e qualsiasi carattere della parola che lo circonda (entrambi \w*) e sostituiscilo con se stesso racchiuso tra virgolette.

Una mappatura in modalità normale per questo:

:nnoremap <leader>q :%s/\<\w*\%#\w*\>/"&"<CR>

Ora hai ottimizzato le cose fino a premere un tasto o due ... qualunque sia la lunghezza della mappatura che scegli.

Quello che suggerirei davvero, però, è di ottenere solo il plug -in vim-surround . Quindi puoi facilmente racchiudere le parole (e altro) con qualsiasi cosa con cui normalmente racchiuderesti le parole (ad es. Parentesi).