Qué comando de Vim(s) puede ser utilizado para citar/cierro la cita de las palabras?

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

  •  23-09-2019
  •  | 
  •  

Pregunta

¿Cómo puedo citar rápidamente/cierro la cita de las palabras y cambiar de citar (por ejemplo,de ' a ") en Vim?Yo sé acerca de la surround.vim plugin, pero me gustaría usar sólo Vim.

¿Fue útil?

Solución

surround.vim es que va a ser tu respuesta más fácil.Si usted está realmente en contra de su uso, estos son algunos ejemplos de lo que puede hacer.No necesariamente la más eficiente, pero es por eso que la rodean.vim fue escrito.

  • Cita una palabra, el uso de comillas simples
    ciw'Ctrl+r"'
    • ciw - Eliminar la palabra donde está el cursor, y terminan en el modo insertar.
    • ' - agregar la primera cita.
    • Ctrl+r" - Insertar el contenido de la " registrar, también conocido como el último tirón/eliminar.
    • ' - agregar las comillas de cierre.

  • Cierro la cita una palabra entre comillas simples
    di'hPl2x
    • di' - Eliminar la palabra encerrado por comillas simples.
    • hP - Mover el cursor a la izquierda un lugar (en la parte superior de la apertura de la cita) y poner el sólo texto eliminado antes de la cita.
    • l - Mover el cursor a la derecha un lugar (en la parte superior de la apertura de la cita).
    • 2x - Eliminar las dos citas.

  • Cambiar entre comillas simples para las comillas dobles
    va':s/\%V'\%V/"/g
    • va' - Seleccionar el citado palabra y de las comillas.
    • :s/ - Iniciar un reemplazo.
    • \%V'\%V - Sólo coincidirá con comillas simples que están dentro de los discapacitados región seleccionada.
    • /"/g - Reemplazar todos ellos con comillas dobles.

Otros consejos

  

la cita de una palabra, usando comillas simples

     

ciw'Ctrl+r"'

Era más fácil para que lo haga de esta manera

ciw '' Esc P

Aquí hay algo de mapeo que podría ayudar:

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

Si no ha cambiado la variable mapleader, a continuación, activar el mapeo con \q" \q' o \qd. Añaden comillas dobles alrededor de la palabra bajo el cursor, comilla simple alrededor de la palabra bajo el cursor, borrar las comillas alrededor de la palabra bajo el cursor, respectivamente.

Además de los otros comandos, esto va a incluir todas las palabras en una línea entre comillas dobles (como por su comentario)

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

o si desea reducir el número de barras invertidas, se puede poner un \v (muy mágico) modificador en el inicio del patrón

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

Para envolver entre comillas simples (por ejemplo) las obras ciw'<C-r>"'<esc>, pero repetición no funcionará. Proveedores:

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

Esto pone el contenido de la omisión del registro "literalmente". Ahora puede pulsar . en la palabra para envolver entre comillas. Para obtener más información consulte :h[elp] i_ctrl-r y más acerca de objetos de texto en el :h text-objects

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

La forma macros

  1. presione q y q para grabación en q registro (usamos "q" como un atajo para recordar "comillas").

  2. pulse cambio + b mueve el cursor a la parte delantera de la palabra actual

  3. pulse i type ' (un solo comillas)

  4. pulse esc a continuación pulse e para mover al final de la palabra

  5. presione a a continuación, presione ' de nuevo para rodear la palabra entre comillas.

  6. Finalmente presione q para registrarlo en el registro q.

¿Cómo se usa:

  1. Mover el cursor a la palabra deseada.
  2. Presione @ q para rodear una palabra entre comillas.
  3. Presione @ @ si desea repetir en otra palabra.

Se puede alterar step 4 con cualquier cosa que te guste {una línea, una palabra hasta que se encuentra un poco de carácter, etc}. Ponerlo en vim variables y .vimrc repetir su felicidad.

No sé cualquier orden interna vim para esto, pero utilizando r"f'r" a cambio de 'a 'y r'f"r' a cambio de' a' funciona si uno se para en la primera "o". Los comandos reemplaza cualquier carácter es r' bajo el cursor con', y f" usted se mueve hacia adelante a la siguiente".

Para los usuarios de VSCodeVim que pueden hacer

vwS"

  • Usted puede reemplazar " con lo que usted quisiera envolver por.
  • Puede reemplazar w con cualquier otro operador de selección

La Adición De Citas

Empecé a usar este rápido y sucio función en mi .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

Así que ahora, seleccione visualmente lo que yo quiera (normalmente a través de viw - seleccionar dentro de word) en las cotizaciones y de prensa Q por comillas dobles, o pulse q por comillas simples.

La Eliminación De Las Cotizaciones

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

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

Yo uso vim-textobj comillas así que vim trata citas como objetos de texto.Esto significa que puedo hacer vaq (seleccione visualmente alrededor de las cotizaciones.Esto encuentra el más cercano de cotizaciones y visualmente selecciona ellos.(Esto es opcional, usted puede hacer algo como f"vww).A continuación, pulse s a tira las citas de la selección.

El Cambio De Las Cotizaciones

BESO.Yo quitar las comillas entonces agregar comillas.Por ejemplo, para reemplazar las comillas simples con comillas dobles, me gustaría realizar los siguientes pasos:1.quitar las comillas simples: vaqs, 2.añadir nuevas citas: vwQ.


Aquí hay algunas asignaciones simples que pueden ser utilizados para con y sin comillas una palabra:

" '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>

Estoy usando nnoremap en mi .vimrc

Para comilla una palabra:

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

Para eliminar las citas (obras en comillas dobles también):

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

regla para recordar:. 'Cuadrados' = comilla simple

VIM para vscode lo hace awsomely. Se basa uno vim-envolvente si no se utiliza vscode.

  

Algunos ejemplos:

     

"prueba" con el cursor entre comillas el tipo C "' para terminar con la 'prueba'

     

"prueba" con el cursor dentro ds tipo comillas" para terminar con la prueba

     

"prueba" con el cursor entre comillas el tipo C "t e introduzca 123> para terminar   con <123> test

     

test con el cursor en la palabra de tipo de prueba ysaw) para terminar con (test)

¿qué tal esto?

 :%s/\'/"/g

Me escribió un script que hace esto:

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>

Para su uso, simplemente resaltar algo, control de golpe l, y luego escribir un carácter. Si se trata de uno de los personajes de la función conoce, que va a proporcionar el carácter de terminación correcta. Si no lo es, se usará el mismo carácter para insertar en ambos lados.

Surround.vim puede hacer algo más que esto, pero esto era suficiente para mis necesidades.

Mapa del modo de ejemplo Visual para agregar comillas simples alrededor de un bloque de texto seleccionado:

:vnoremap qq <Esc>`>a'<Esc>`<i'<Esc>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top