En utilisant expand-region
Je recommanderais d'installer le expand-region
package (également disponible sur Melpa). Il serait utile pour éditer les situations mentionnées dans votre exemple et bien plus encore.
expand-region
est intelligent. Basé sur le mode principal, il essaiera de comprendre ce que vous essayez de sélectionner. Je ne sais pas de quelle langue vous avez l'exemple d'extrait, je vais donc utiliser votre exemple d'extrait de code et le modifier légèrement pour Python (supprimer;). Donc mon explication ci-dessous est avec l'extrait de code ci-dessous dans un python-mode
tampon.
ref = open('specific-file-name')
Si le point est à côté d'un guillemet simple
Les rectangles verticaux noirs ci-dessous indiquent à quoi ressemblera le curseur.
# 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'▮
Dans les deux cas, lorsque vous le ferez M-x er/expand-region
, 'specific-file-name'
sera sélectionné et vous pouvez ensuite appuyer sur DEL
(ou revenir en arrière) pour supprimer la sélection.
Si vous avez delete-selection-mode
activé (j'aime que cela soit activé personnellement), vous pouvez commencer à taper après avoir fait la sélection et cela écrasera la sélection.
Bien sûr, si vous en utilisez er/expand-region
beaucoup, vous le lieriez à un raccourci clavier. J'aime le lier à C-\
. Donc, avec le point à côté d'une seule citation: C-\fname
me donneraref = open(fname);
Si le point est quelque part à l'intérieur des guillemets
En utilisant expand-region
, le point n'a pas besoin d'être près des guillemets. Mais dans ce cas, vous aurez besoin de quelques touches de plus (généralement un ou deux de plus).
Disons que la position du curseur est comme ci-dessous maintenant:
# cursor shown below is hiding the i character under it
ref = open('specif▮c-file-name')
En utilisant la même liaison que celle utilisée ci-dessus:
- La première fois que je frappe,
C-\
je sélectionnerai specific
.
Maintenant, je dois juste frapper \
pour étendre la sélection ( expand-region
fonctionnalité). Cela sélectionnera specific-file-name
.
Si vous aviez lié er/expand-region
à C-=
, frapper à =
nouveau fera l'expansion progressive. Lisez sa documentation sur la façon de lier des clés pour une expansion / contraction incrémentielle de la sélection.
- Frapper
\
une fois de plus sélectionnera 'specific-file-name'
.
- Maintenant, vous devez appuyer sur
DEL
pour supprimer la sélection, puis taper fname
. Si delete-selection-mode
est activé, vous pouvez ignorer le DEL
trait.
En résumé, avec delete-selection-mode
permis, les frappes ressemblent: C-\\\fname
.
En utilisant change-inner
Je suis également tombé sur le change-inner
package de l' expand-region
auteur magnars (qui l'utilise expand-region
comme back-end) pour faire exactement ce que fait le Vim ci
(et aussi changer externe ).
À partir du package README:
change-inner
vous donne le ci
commandement de vim , en s'appuyant sur expand-region
. Cela s'explique plus facilement par l'exemple:
function test() {
return "semantic kill";
}
Avec un point après le mot sémantique
change-inner "
tuerait le contenu de la chaîne
change-outer "
tuerait la chaîne entière
change-inner {
tuerait la déclaration de retour
change-outer {
tuerait le bloc entier
ref = open(|'specific-file-name');
,C-M-k
donneraref = open(|);
. Les citations sont également des sexps équilibrés .delete-everything-inside-parens
sorte de chose, nondelete-first-sexp-inside-parens
.evil
émule la plupart de Vim, et il fait des objets texte hors de la boîte.En d'autres termes, avec
evil
activé et en utilisant les raccourcis clavier par défaut,ci(
fera exactement ce que vous demandez: changer ce qui est à l'intérieur des parenthèses englobantes.Plus précisément,
ci(
sera enchaînéevil-change
àevil-inner-paren
. Vous pouvez également créer vos propres objets texte arbitraires à votre guise.la source
evil
, pourquoi voudriez-vous la nonevil
alternative?Utilisation de smartparens
Tuer
1) Utilisez
C-M-u
(sp-backward-up-sexp
) pour sortir des'
délimiteurs.2) Utilisez
C-0 C-M-k
(0
préfixe +sp-kill-sexp
) pour tuer des choses dans sexp actuel ouC-k
(sp-kill-hybrid-sexp
). Ce dernier ne fonctionne que lorsqu'ilsmartparens-strict-mode
est activé et que le sexp actuel tient sur une seule ligne.Marquer et supprimer / tuer / copier
1) Trouvez votre chemin vers le début de sexp (dans cet exemple
C-M-u sp-backward-up-sexp
suffit), marquezC-SPC
et allez à la fin de sexp avecsp-end-of-sexp
.2) Ensuite, vous pouvez faire tout ce que vous voulez:
C-w
tuer la région,M-w
tuer la zone de sauvegarde (copier), labackspace
supprimer sans encombrer le kill ring (uniquement avecdelete-selection-mode
)Fonction Mark-inside-sexp
smartparens
le paquet a unesp-mark-sexp
fonction qui marque tout le prochain sexp, c'est-à-dire des délimiteurs et des trucs entre eux.Vous pouvez utiliser une fonction comme celle-ci pour supprimer les délimiteurs de la sélection:
Sortez de votre sexp en utilisant à
C-M-u
plusieurs reprises et lancez mark-inside-sexp-using-sp, puis décidez quoi faire avec la région active.la source