yank la prima parola da ogni riga in vim

sto usando vim e vorrei copiare la prima parola per una serie di righe consecutive. l’unica cosa che potrei pensare è :4,32yw (per le linee 4-32), ma non ha funzionato. qualsiasi aiuto è apprezzato in anticipo, grazie!

EN From: Yank the first word from each line in vim

More similar articles:

2 Comments

  1. puoi farlo, ma potrebbe essere un po ‘più complicato che usare un semplice comando come hai fatto tu.

    quello che si è tentato di eseguire, è comandi normali come eseguire i comandi. che non funziona come hai fatto. i comandi in modalità normale (come premere yw) non funzionano con i comandi ex.


    per eseguire i comandi in modalità normale in modalità ex-comando, si dovrebbe usare il comando normal (per maggiori informazioni, si può vedere :help normal). tuttavia, anche se si cambiasse comando per utilizzare il normale comando mode (qualcosa come :4,32 normal yw) non funziona ancora, dal momento che questo sarebbe eseguito per ogni riga, ogni volta in esecuzione sul precedente valore yanked.

    si può fare l’azione desiderata, utilizzando un registro vim che appenda la parola in ogni ciclo (per maggiori informazioni sui registri si può leggere :help registers).


    per farlo, si dovrebbe cambiare il comando per essere qualcosa di simile :3,32 normal ^"Ayw.

    per abbattere questo comando:

    • : – digitare la modalità ex-comando.
    • 3,32 – L’intervallo per eseguire il comando.
    • normal – Il comando effettivo da eseguire.
    • ^ – Vai all’inizio della linea.
    • "A – Esegui lo yank nel registro, aggiungendo i dati ai dati precedentemente salvati.
    • yw – Asina la parola corrente.

    in seguito, per stampare i valori copiati, è necessario utilizzare "ap (in modalità normale) nella posizione desiderata.

    svantaggi svantaggi svantaggi svantaggi svantaggi

    si noti che il comando inserisce la nuova parola nei registri, ignorando il primo valore del registro. significa che se il registro non fosse vuoto una volta eseguito questo comando, tutte le parole sarebbero aggiunte al valore corrente del registro.

    per cancellare il valore precedente del registro, è possibile eseguire il comando:

    :let @a=''

    prima di eseguire il comando yank.

    automazione automazione automazione automazione automazione

    nel caso in cui si desidera farlo molte volte, si potrebbe voler utilizzare una semplice funzione che farebbe tutto per voi, invece farvi eseguire entrambi i comandi ogni volta.


    una semplice funzione che farebbe questo:

    function! CopyFirst(first_line, second_line, register)
        execute "let @" . a:register. "=''"
        execute a:first_line . "," . a:second_line . "normal ^\"" . toupper(a:register) . "yw"
    endfunction

    uso: uso:

    :call Copyfirst(3, 32, 'a')
    "ap
  2. questa funzione utilizza un intervallo di funzioni (maggiori informazioni su questa funzione in :help func-range):

    " Get the first word of the line for a given range of lines
    function! GetFirstWord() range
        let @a=""
        execute a:firstline.",".a:lastline."g/.*/y A"
        echo split(substitute(@a," *\\(\\w\\+\\).\\{-}\\n","\\1 ","g"))
    endfunction

    la prima linea pulisce registrare a. la seconda linea yanks le linee all’interno della gamma nel registro a. l’ultima riga stampa una Lista con le prime parole di ogni riga. esempio di file di input:

    some sample
       text abc
       123 456
    function
    yy xx

    esempio di chiamata e di uscita:

    :2,4call GetFirstWord()
    ['text', '123', 'function']

Leave a Reply

Your email address will not be published. Required fields are marked *