¿Cómo puedo citar / citar palabras rápidamente y cambiar las citas (por ejemplo, de '
a "
) en Vim? Sé sobre el complemento surround.vim , pero me gustaría usar solo Vim.
¿Cómo puedo citar / citar palabras rápidamente y cambiar las citas (por ejemplo, de '
a "
) en Vim? Sé sobre el complemento surround.vim , pero me gustaría usar solo Vim.
Respuestas:
surround.vim será tu respuesta más fácil. Si realmente está dispuesto a usarlo, aquí hay algunos ejemplos de lo que puede hacer. No necesariamente el más eficiente, pero es por eso que se escribió surround.vim.
ciw'Ctrl+r"'
ciw
- Elimine la palabra en la que está el cursor y termine en modo de inserción.'
- agregue la primera cita.Ctrl+r"
- Inserte el contenido del "
registro, también conocido como el último tirón / eliminación.'
- Añadir la cita de cierre.
di'hPl2x
di'
- Eliminar la palabra entre comillas simples.hP
- Mueva el cursor hacia la izquierda un lugar (en la parte superior de la cita de apertura) y coloque el texto recién eliminado antes de la cita.l
- Mueva el cursor hacia la derecha un lugar (en la parte superior de la cita de apertura).2x
- Eliminar las dos citas.
va':s/\%V'\%V/"/g
va'
- Seleccione visualmente la palabra entre comillas y las comillas.:s/
- Comience un reemplazo.\%V'\%V
- Solo coincide con comillas simples que están dentro de la región seleccionada visualmente./"/g
- Reemplácelos con comillas dobles.ciw
y no solo cw
? El primero me parece confuso y el segundo funciona bien.
ciw
funciona independientemente de dónde esté el cursor en la palabra. cw
solo funciona si el cursor está al comienzo de la palabra. Ver :help iw
.
.
comando. Para que funcione, use ciw' Ctrl+r Ctrl+p"
. Luego .
se comportará como lo desee para la siguiente palabra: en lugar de recordar el contenido del registro, recordará que desea lo que está en el registro en este momento (algo difícil de explicar, pero si intenta ambos, será obvio :-))
Cita una palabra, usando comillas simples
ciw'Ctrl+r"'
Fue más fácil para mí hacerlo de esta manera
ciw '' Esc P
Aquí hay algunos mapas que podrían 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, active la asignación con \q"
\q'
o \qd
. Agregan comillas dobles alrededor de la palabra debajo del cursor, comillas simples alrededor de la palabra debajo del cursor, eliminan las comillas alrededor de la palabra debajo del cursor respectivamente.
map <Leader>' gewi'<Esc>A'<Esc>
a mi .vimrc
archivo para insertar comentarios de comillas simples desde la posición actual hasta el final de la línea; lo que me ayudó al convertir algunos scripts de MSDOS a bash.
:vnoremap <leader>q c""<esc>P
.
Además de los otros comandos, esto incluirá todas las palabras en una línea entre comillas dobles (según su comentario)
:s/\(\S\+\)/"\1"/
o si desea reducir la cantidad de barras invertidas, puede colocar un \v
modificador (muy mágico) al comienzo del patrón
:s/\v(\S+)/"\1"/
:s/\v([a-Z]+)/"\1"/g
Las formas macro!
presione qy qpara grabar en el registro q (usamos "q" como acceso directo para recordar "comillas").
presione shift+ bmueva el cursor al frente de la palabra actual
itipo de prensa '(comillas simples)
presione escluego presione epara moverse al final de la palabra
presione y aluego presione 'nuevamente para rodear la palabra con comillas.
presione escpara ingresar al modo normal.
finalmente presione qpara grabarlo en el q
registro.
Cómo utilizar
Puedes alterarlo step 4
con lo que quieras {una línea, una palabra hasta que encuentres algún carácter, etc.}.
Hacer que la macro grabada sea persistente
let @ q = ' ctrl+ r ctrl+ rq'
guardar y Salir
abre tus archivos, ve a algunas palabras
@q
si lo haces correctamente, deberían aparecer cosas mágicas en tus palabras.
Puedes seguir estos pasos para otras macros que te encantó.
@q w
y luego podría ajustar las siguientes n
palabras con comillas usando n@j
.
ciw'<C-r>"'<esc>
Funcionar entre comillas simples (por ejemplo) funciona, pero repetir no funcionará. Tratar:
ciw'<C-r><C-o>"'<esc>
Esto pone el contenido del registro predeterminado "literalmente". Ahora puede presionar .
cualquier palabra para ponerla entre comillas. Para obtener más información, vea :h[elp] i_ctrl-r
y más sobre objetos de texto en:h text-objects
Fuente: http://vimcasts.org/episodes/pasting-from-insert-mode/
ciw'<C-R><C-O>"'<Esc>
.
.
reescribirá el contenido de la última llamada real.
Para los usuarios de VSCodeVim puedes hacer
vwS"
"
con lo que quieras envolver.w
con cualquier otro operador de selecciónviwS'
la palabra entre comillas simples. De lejos, el más fácil.
viwS"
No conozco ningún comando vim incorporado para esto, pero usar r"f'r"
para cambiar de 'a "y r'f"r'
cambiar de" a' funciona si te paras en la primera 'o ". El comando r'
reemplaza cualquier carácter que esté debajo de tu cursor con', y f"
te lleva al siguiente ".
'r
y "r
), puede simplemente escribir .
Y si desea cambiar más comillas, ;
y ,
llevarlo al siguiente o al anterior, ya que repiten la última f/F/t/T
búsqueda en la misma dirección o en la opuesta, respectivamente.
Agregar cotizaciones
Empecé a usar esta función rápida y sucia 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, selecciono visualmente lo que quiero (típicamente a través de viw
- seleccionar visualmente dentro de la palabra ) entre comillas y presiono Qpara comillas dobles, o presiono qpara comillas simples.
Eliminar cotizaciones
vnoremap s <esc>:call StripWrap()<cr>
function! StripWrap()
normal `>x`<x
endfunction
Uso vim-textobj-quotes para que vim trate las citas como objetos de texto. Esto significa que puedo hacer vaq
(seleccionar visualmente entre comillas . Esto encuentra las comillas más cercanas y las selecciona visualmente. (Esto es opcional, puede hacer algo como f"vww
). Luego presiono s
para quitar las comillas de la selección.
Cotizaciones cambiantes
BESO. Me quito las citas a continuación, agregan cotizaciones . Por ejemplo, para reemplazar comillas simples por comillas dobles, me gustaría realizar los pasos: comillas simples 1. Extraer: vaqs
, 2. añadir nuevas citas: vwQ
.
Si usa el complemento vim https://github.com/tpope/vim-surround (o usa el complemento VSCode Vim, que viene con vim-surround preinstalado), ¡es bastante conveniente!
añadir
ysiw' // surround in word `'`
soltar
ds' // drop surround `'`
cambio
cs'" // change surround from `'` to `"`
¡Incluso funciona para etiquetas html!
cst<em> // change surround from current tag to `<em>`
echa un vistazo al readme en github para obtener mejores ejemplos
Aquí hay algunas asignaciones simples que pueden usarse para citar y descomponer 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>
qw
qd
wq
VIM para vscode lo hace increíblemente. Está basado en un vim-surround si no usa vscode.
Algunos ejemplos:
"prueba" con el cursor entre comillas, escriba cs "'para terminar con' prueba '
"prueba" con el cursor entre comillas, escriba ds "para terminar con la prueba
"prueba" con el cursor dentro de las comillas, escriba cs "t e ingrese 123> para terminar con <123> prueba
prueba con cursor en palabra prueba tipo ysaw) para terminar con (prueba)
Estoy usando nnoremap en mi .vimrc
Para comillas simples una palabra:
nnoremap sq :silent! normal mpea'<Esc>bi'<Esc>`pl
Para eliminar comillas (también funciona en comillas dobles):
nnoremap qs :silent! normal mpeld bhd `ph<CR>
Regla para recordar: 'sq' = comilla simple.
¿Qué tal esto?
:%s/\'/"/g
%
, funcionará solo en la línea actual a menos que haya seleccionado el archivo completo
Escribí un guión 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 usar, solo resalta algo, presiona control l y luego escribe un carácter. Si es uno de los caracteres que la función conoce, proporcionará el carácter de terminación correcto. Si no es así, usará el mismo carácter para insertar en ambos lados.
Surround.vim puede hacer más que esto, pero esto fue suficiente para mis necesidades.