por - ¿Qué comando(s) de Vim se pueden usar para citar/unir palabras?
salir de vi linux (11)
¿Cómo puedo citar / unir palabras rápidamente y cambiar las citas (por ejemplo, de ''
a "
) en Vim? Conozco el complemento surround.vim , pero me gustaría usar solo Vim.
Cita una palabra, usando comillas simples
ciw''Ctrl+r"''
Fue más fácil para mí hacerlo de esta manera
ciw '''' Esc P
¿Qué tal esto?
:%s//'/"/g
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 quieres reducir el número de barras diagonales inversas, puedes poner un modificador /v
(muy mágico) al comienzo del patrón
:s//v(/S+)/"/1"/
Aquí hay algunas asignaciones simples que se pueden utilizar para citar y unir 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>
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 del mapleader, entonces active la asignación con /q"
/q''
o /qd
. /qd
comillas dobles alrededor de la palabra debajo del cursor, comillas simples alrededor de la palabra debajo del cursor, elimine cualquier comilla alrededor del palabra debajo del cursor respectivamente.
Estoy usando nnoremap en mi .vimrc
Para solo citar una palabra:
nnoremap sq :silent! normal mpea''<Esc>bi''<Esc>`pl
Para eliminar las comillas (también funciona con comillas dobles):
nnoremap qs :silent! normal mpeld bhd `ph<CR>
Regla para recordar: ''sq'' = comilla simple.
No conozco ningún comando vim incorporado para esto, pero usar r"f''r"
para cambiar de "a" y r''f"r''
para cambiar de "a" funciona si te paras en el primero "o". El comando r''
reemplaza cualquier carácter que esté debajo del cursor con'', y f"
mueve hacia adelante al siguiente''.
Para ajustar comillas simples (por ejemplo) ciw''<Cr>"''<esc>
funciona, pero repetir no funcionará. Pruebe:
ciw''<C-r><C-o>"''<esc>
Esto pone el contenido del registro predeterminado "literalmente". Ahora puedes presionar en cualquier palabra para envolverlo entre comillas. Para obtener más información, consulte :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/
surround.vim va a ser tu respuesta más fácil. Si realmente está en contra de 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.
- Cita una palabra, usando comillas simples
ciw''Ctrl+r"''
-
ciw
- Borra la palabra en la que está el cursor, y termina en el modo de inserción. -
''
- agrega la primera cita. -
Ctrl+r"
- Inserta el contenido del"
registro, también conocido como el último tirón / eliminación. -
''
- agregue la cotización de cierre.
-
- Cite una palabra entre comillas simples
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.
-
- Cambiar comillas simples a comillas dobles
va'':s//%V''/%V/"/g
-
va''
- Selecciona visualmente la palabra entre comillas y las comillas. -
:s/
- Comience un reemplazo. -
/%V''/%V
- Solo coincide con comillas simples que se encuentran dentro de la región seleccionada visualmente. -
/"/g
- Sustitúyalos todos con comillas dobles.
-
Agregar citas
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 todo lo que quiero (generalmente a través de viw
- seleccionar visualmente la palabra dentro ) entre comillas y viw
Q para comillas dobles, o presiono q para comillas simples.
Quitando cotizaciones
vnoremap s <esc>:call StripWrap()<cr>
function! StripWrap()
normal `>x`<x
endfunction
Uso vim-textobj-quotes para que vim trate las comillas como objetos de texto. Esto significa que puedo hacer vaq
(seleccionar visualmente las comillas, esto encuentra las comillas más cercanas y las selecciona visualmente. (Esto es opcional, puedes hacer algo como f"vww
). Luego f"vww
s
para quitar las comillas de la selección.
Cambio de cotizaciones
BESO. Elimino las comillas y agrego las comillas . Por ejemplo, para reemplazar comillas simples con comillas dobles, realizaría los pasos: 1. eliminar comillas simples: vaqs
, 2. agregar nuevas comillas: vwQ
.
- http://vim.wikia.com/wiki/Wrap_a_visual_selection_in_an_HTML_tag de aquí fue modificado y utilizado como parte de mi respuesta
- vim-textobj-quotes vim-text-obj-quotes
El camino de las macros
presione q y q para grabar en el registro q (usamos "q" como un atajo para recordar "comillas").
presione shift + b mueva el cursor al frente de la palabra actual
presione escribir '' (comillas simples)
presione esc y luego presione e para ir al final de la palabra
presione a y luego presione '' nuevamente para rodear la palabra con comillas.
finalmente presione q para registrarlo en
q
registro.
Cómo usarlo :
- Mueva el cursor a la palabra deseada.
- Presione @ q para rodear una palabra con comillas.
- Presione @ @ si quiere repetirlo en otra palabra.
Puede modificar el step 4
con cualquier cosa que quiera {una línea, una palabra hasta que encuentre algún carácter, etc.}. Ponlo en vim variables
y .vimrc
para repetir tu felicidad.