Domanda

Come posso rapidamente un preventivo/unquote parole e modificare citazione (es.da ' per ") in Vim?Conosco l' surround.vim plugin, ma vorrei utilizzare solo Vim.

È stato utile?

Soluzione

surround.vim sta per essere la risposta più semplice. Se siete veramente impostato contro l'uso di esso, ecco alcuni esempi per quello che si può fare. Non necessariamente il più efficiente, ma è per questo che è stato scritto surround.vim.

  • Citazione una parola, che usano le virgolette singole
    ciw'Ctrl+r"'
    • ciw -. Eliminare la parola il cursore è su, e finire in modalità di inserimento
    • ' - sia il primo a citazione
    • .
    • Ctrl+r" - Inserire il contenuto del registro del ", alias l'ultimo strattone / delete
    • .
    • ' - aggiungere la citazione di chiusura.
  • Unquote una parola che è racchiuso tra apici
    di'hPl2x
    • di' -. Eliminare la parola racchiusa da virgolette singole
    • hP -. Spostare il cursore a sinistra di un posto (in cima alla citazione di apertura) e mettere il testo appena eliminato prima della citazione
    • l -. Spostare il cursore a destra un unico luogo (in cima alla quotazione di apertura)
    • 2x - Eliminare le due citazioni.
  • Cambiare virgolette singole a doppie virgolette
    va':s/\%V'\%V/"/g
    • va' - visivamente selezionare la parola citata e le quotazioni
    • .
    • :s/ -. Inizia una sostituzione
    • \%V'\%V - corrisponde solo virgolette singole che si trovano all'interno della regione selezionata visivamente
    • .
    • /"/g - tutti Sostituire con doppi apici
    • .

Altri suggerimenti

  

Quota una parola, usando le virgolette singole

     

ciw'Ctrl+r"'

E 'stato più facile per me fare in questo modo

ciw '' Esc P

Ecco un po 'di mappatura che potrebbe aiutare:

:nnoremap <Leader>q" ciw""<Esc>P
:nnoremap <Leader>q' ciw''<Esc>P
:nnoremap <Leader>qd daW"=substitute(@@,"'\\\|\"","","g")<CR>P

Se non è stata modificata la variabile mapleader, quindi attivare la mappatura con \q" \q' o \qd. Essi aggiungono virgolette intorno alla parola sotto il cursore, apice singolo intorno alla parola sotto il cursore, eliminare eventuali virgolette la parola sotto il cursore, rispettivamente.

In aggiunta agli altri comandi, questo sarà racchiudere tutte le parole in una linea tra virgolette (come per il vostro commento)

:s/\(\S\+\)/"\1"/

o, se si vuole ridurre il numero di backslash, si può mettere un \v (molto-magic) modificatore alla partenza del modello

:s/\v(\S+)/"\1"/

Per avvolgere in virgolette singole (per esempio) le opere ciw'<C-r>"'<esc>, ma ripetizione non funzionerà. Prova:

ciw'<C-r><C-o>"'<esc>

Questo mette il contenuto del default registrano "letteralmente". Ora è possibile premere . su qualsiasi parola di avvolgerla tra virgolette. Per ulteriori informazioni consultare :h[elp] i_ctrl-r e più oggetti di testo a :h text-objects

Fonte: http://vimcasts.org/episodes/pasting-from-insert -mode /

La via delle macro

  1. premere q e q per la registrazione nel registro q (usiamo "q" come una scorciatoia per ricordare "virgolette").

  2. premere spostare + b spostare il cursore davanti parola corrente

  3. premere i digitate ' (un singolo virgolette)

  4. premere esc quindi premere e per spostarsi alla fine della parola

  5. premere a , quindi premere ' per circondare la parola tra virgolette.

  6. infine premere q per registrarlo nel registro q.

Come si usa:

  1. Spostare il cursore su una parola desiderata.
  2. Premere @ q per circondare una parola tra virgolette.
  3. Premere @ @ se si vuole ripetere in un'altra parola.

È possibile modificare step 4 con tutto quello che vuoi {una riga, una parola fino a trovare un po 'di carattere, etc}. Metterlo in vim variables e .vimrc di ripetere la vostra felicità.

Non so qualsiasi comando vim incorporato per questo, ma utilizzando r"f'r" di cambiare da 'a 'e r'f"r' per passare da' per' funziona se ti trovi sulla prima 'o". Il r' comando sostituisce qualunque carattere è sotto il cursore con', e f" si muove in avanti per il prossimo".

Per gli utenti di VSCodeVim che potete fare

vwS"

  • È possibile sostituire " con tutto ciò che si desidera avvolgere da.
  • È possibile sostituire w con qualsiasi altro operatore di selezione

L'Aggiunta Di Citazioni

Ho iniziato a utilizzare questo rapido e sporco funzione nel mio .vimrc:

vnoremap q <esc>:call QuickWrap("'")<cr>
vnoremap Q <esc>:call QuickWrap('"')<cr>

function! QuickWrap(wrapper)
  let l:w = a:wrapper
  let l:inside_or_around = (&selection == 'exclusive') ? ('i') : ('a')
  normal `>
  execute "normal " . inside_or_around . escape(w, '\')
  normal `<
  execute "normal i" . escape(w, '\')
  normal `<
endfunction

Così, adesso, selezionare visivamente quello che voglio (in genere tramite viw - selezionare visivamente all'interno di word) in virgolette e premere Q per le virgolette, o premere q per le virgolette singole.

Rimozione Di Citazioni

vnoremap s <esc>:call StripWrap()<cr>

function! StripWrap()
  normal `>x`<x
endfunction

Io uso vim-textobj-preventivi in modo che vim tratta di citazioni come oggetti di testo.Questo significa che posso fare vaq (selezionare visivamente intorno preventivi.Questo trova la più vicina preventivi e visivamente li seleziona.(Questo è opzionale, si può solo fare qualcosa di simile f"vww).Ho quindi premere s per striscia le citazioni di selezione.

Preventivi Cambiare

BACIO.Io rimuovere le virgolette quindi aggiungere le virgolette.Per esempio, per sostituire le virgolette le virgolette, vorrei eseguire la seguente procedura:1.rimuovere le virgolette singole: vaqs, 2.aggiungere nuove citazioni: vwQ.


Ecco alcuni semplici mappature che possono essere utilizzati per citare e unquote una parola:

" 'quote' a word
nnoremap qw :silent! normal mpea'<Esc>bi'<Esc>`pl
" double "quote" a word
nnoremap qd :silent! normal mpea"<Esc>bi"<Esc>`pl
" remove quotes from a word
nnoremap wq :silent! normal mpeld bhd `ph<CR>

Sto usando nnoremap nel mio Vimrc

Per virgoletta una parola:

nnoremap sq :silent! normal mpea'<Esc>bi'<Esc>`pl

Per rimuovere le virgolette (funziona su doppi apici così):

nnoremap qs :silent! normal mpeld bhd `ph<CR>

regola da ricordare:. 'Quadrati' = singola citazione

VIM per vscode fa awsomely. Si basa una vim surround se non si utilizza vscode.

  

Alcuni esempi:

     

"test" con il cursore all'interno citazioni di tipo cs "' per finire con 'test'

     

"test" con il cursore all'interno di apici tipo ds" per finire con test

     

"test" con cursore all'interno citazioni digitare cs "t e inserire 123> finire   con <123> test

     

prova con il cursore sulla parola prova di tipo ysaw) per finire con (test)

come su questo?

 :%s/\'/"/g

ho scritto uno script che fa questo:

function! WrapSelect (front)
    "puts characters around the selected text.
    let l:front = a:front
    if (a:front == '[')
        let l:back = ']'
    elseif (a:front == '(')
        let l:back = ')'
    elseif (a:front == '{')
        let l:back = '}'
    elseif (a:front == '<')
        let l:back = '>'
    elseif (a:front =~ " ")
        let l:split = split(a:front)
        let l:back = l:split[1]
        let l:front = l:split[0]
    else
        let l:back = a:front
    endif
    "execute: concat all these strings. '.' means "concat without spaces"
    "norm means "run in normal mode and also be able to use \<C-x> characters"
    "gv means "get the previous visual selection back up"
    "c means "cut visual selection and go to insert mode"
    "\<C-R> means "insert the contents of a register. in this case, the
    "default register"
    execute 'norm! gvc' . l:front. "\<C-R>\""  . l:back
endfunction
vnoremap <C-l> :<C-u>call WrapSelect(input('Wrapping? Give both (space separated) or just the first one: '))<cr>

Per usare, basta evidenziare qualcosa, ha colpito il controllo l, e quindi digitare un carattere. Se si tratta di uno dei personaggi della funzione sa riguardo, sarà fornire il carattere di terminazione corretta. Se non lo è, si userà lo stesso carattere da inserire su entrambi i lati.

Surround.vim può fare di più che questo, ma questo era sufficiente per le mie esigenze.

visivo modalità mappa ad esempio per aggiungere virgolette singole intorno a un blocco di testo selezionato:

:vnoremap qq <Esc>`>a'<Esc>`<i'<Esc>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top