Utilizando expand-region
Recomendaría instalar el expand-region
paquete (también disponible en Melpa). Sería útil para editar situaciones mencionadas en su ejemplo y mucho más.
expand-region
es inteligente. Según el modo principal, intentará descubrir qué está intentando seleccionar. No sé de qué idioma tiene el fragmento de ejemplo, por lo que utilizaré su fragmento de código de ejemplo y lo modificaré ligeramente para Python (eliminar;). Entonces, mi explicación a continuación es con el fragmento de código a continuación en un python-mode
búfer.
ref = open('specific-file-name')
Si el punto está al lado de una comilla simple
Los rectángulos verticales negros a continuación indican cómo se verá el cursor.
# point on left of left quote, the cursor is hiding the quote under it
ref = open(▮specific-file-name')
# point on left of right parenthesis, the cursor is hiding the parenthesis under it
ref = open('specific-file-name'▮
En cualquier caso, cuando lo haga M-x er/expand-region
, 'specific-file-name'
se seleccionará y luego podrá presionar DEL
(o retroceder) para eliminar la selección.
Si ha delete-selection-mode
habilitado (me gusta habilitarlo personalmente), puede comenzar a escribir después de hacer la selección y eso sobrescribirá la selección.
Por supuesto, si usa er/expand-region
mucho, lo vincularía a una combinación de teclas corta. Me gusta vincularlo C-\
. Entonces, con un punto al lado de una sola cita: C-\fname
me daráref = open(fname);
Si el punto está en algún lugar dentro de las comillas
Usando expand-region
, el punto no necesita estar cerca de las comillas. Pero en este caso, necesitará unas pocas pulsaciones de teclas más (generalmente una o dos más).
Digamos que la posición del cursor es la siguiente ahora:
# cursor shown below is hiding the i character under it
ref = open('specif▮c-file-name')
Usando el mismo enlace que usé anteriormente:
- La primera vez que golpee
C-\
seleccionaré specific
.
Ahora solo necesito presionar \
para expandir la selección ( expand-region
función). Eso lo seleccionará specific-file-name
.
Si tenía que er/expand-region
hacerlo C-=
, golpear =
nuevamente hará la expansión incremental. Lea su documentación sobre cómo vincular teclas para la expansión / contracción incremental de la selección.
- Golpear
\
una vez más seleccionará 'specific-file-name'
.
- Ahora continúa presionando
DEL
para eliminar la selección y luego escribe fname
. Si delete-selection-mode
está habilitado, puede omitir el DEL
trazo.
En resumen, la delete-selection-mode
habilita, las pulsaciones de teclas se ven como: C-\\\fname
.
Utilizando change-inner
También me encontré con el change-inner
paquete del expand-region
autor Magnars (que usa expand-region
como back-end) para hacer exactamente lo que hace el Vim ci
(y también cambiarlo externamente ).
Del paquete README:
change-inner
da de que vim ci
comando, sobre la base expand-region
. Se explica más fácilmente con un ejemplo:
function test() {
return "semantic kill";
}
Con punto después de la palabra semántica
change-inner "
mataría el contenido de la cadena
change-outer "
mataría toda la cadena
change-inner {
mataría la declaración de retorno
change-outer {
mataría todo el bloque
ref = open(|'specific-file-name');
,C-M-k
daráref = open(|);
. Las citas también son sexps equilibrados .delete-everything-inside-parens
algo así, nodelete-first-sexp-inside-parens
.evil
emula la mayoría de Vim, y hace objetos de texto fuera de la caja.En otras palabras, con la
evil
activación y el uso de las combinaciones de teclas predeterminadas,ci(
hará exactamente lo que está pidiendo: cambiar lo que está dentro de los paréntesis.Más precisamente,
ci(
se encadenaráevil-change
aevil-inner-paren
. También puede crear sus propios objetos de texto arbitrarios como desee.fuente
evil
, ¿por qué querría la noevil
alternativa?Usando smartparens
Matar
1) Use
C-M-u
(sp-backward-up-sexp
) para salir de los'
delimitadores.2) Use
C-0 C-M-k
(0
prefijo +sp-kill-sexp
) para matar cosas dentro del sexp actual oC-k
(sp-kill-hybrid-sexp
). Este último solo funciona cuandosmartparens-strict-mode
está habilitado y el sexp actual se ajusta en una línea.Marcar y borrar / matar / copiar
1) Encuentra tu camino al comienzo de sexp (en este ejemplo
C-M-u sp-backward-up-sexp
es suficiente), marcaC-SPC
y ve al final de sexp consp-end-of-sexp
.2) Luego puede hacer lo que desee:
C-w
matar a la región, matar a la regiónM-w
de guardar el anillo (copiar),backspace
eliminarla sin saturar el anillo de matar (solo condelete-selection-mode
)Función Mark-inside-sexp
smartparens
El paquete tiene unasp-mark-sexp
función que marca el próximo sexp completo, es decir, delimitadores y cosas entre ellos.Puede usar una función como esta para eliminar delimitadores de la selección:
Sal de tu sexp usando
C-M-u
repetidamente y dispara mark-inside-sexp-using-sp y luego decide qué hacer con la región activa.fuente