Verwenden von expand-region
Ich würde empfehlen, das expand-region
Paket zu installieren (auch auf Melpa verfügbar). Dies ist nützlich, um in Ihrem Beispiel erwähnte Situationen und vieles mehr zu bearbeiten.
expand-region
ist intelligent. Basierend auf dem Hauptmodus wird versucht, herauszufinden, was Sie auswählen möchten. Ich weiß nicht, aus welcher Sprache Sie das Beispiel-Snippet haben, daher werde ich Ihr Beispiel-Code-Snippet verwenden und es für Python leicht ändern (remove;). Meine folgende Erklärung bezieht sich also auf das folgende Codefragment in einem python-mode
Puffer.
ref = open('specific-file-name')
Wenn Punkt neben einem einfachen Anführungszeichen steht
Die schwarzen vertikalen Rechtecke unten zeigen an, wie der Cursor aussehen wird.
# 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'▮
In jedem Fall, wenn Sie das tun M-x er/expand-region
, 'specific-file-name'
wird erhalten ausgewählt und Sie können dann getroffen DEL
(oder Backspace) um die Auswahl zu löschen.
Wenn Sie delete-selection-mode
aktiviert haben (ich möchte, dass dies persönlich aktiviert wird), können Sie nach der Auswahl mit dem Tippen beginnen. Dadurch wird die Auswahl überschrieben.
Wenn Sie er/expand-region
viel verwenden, würden Sie es natürlich an eine kurze Schlüsselbindung binden. Ich binde es gerne an C-\
. Also mit Punkt neben einem einzigen Zitat: C-\fname
werde ich gebenref = open(fname);
Wenn der Punkt irgendwo in den Anführungszeichen steht
Bei Verwendung expand-region
muss der Punkt nicht in der Nähe der Anführungszeichen liegen. In diesem Fall benötigen Sie jedoch nur noch wenige (normalerweise ein oder zwei weitere) Tastenanschläge.
Angenommen, die Cursorposition ist jetzt wie folgt:
# cursor shown below is hiding the i character under it
ref = open('specif▮c-file-name')
Verwenden Sie die gleiche Bindung wie oben:
- Das erste Mal, wenn ich drücke,
C-\
wird ausgewählt specific
.
Jetzt muss ich nur noch drücken \
, um die Auswahl ( expand-region
Funktion) zu erweitern. Das wird auswählen specific-file-name
.
Wenn Sie gebunden haben er/expand-region
, C-=
führt ein erneutes Schlagen =
die inkrementelle Erweiterung aus. Lesen Sie die Dokumentation zum Binden von Schlüsseln für die schrittweise Erweiterung / Kontraktion der Auswahl.
- Durch erneutes Schlagen
\
wird ausgewählt 'specific-file-name'
.
- Nun drücken Sie,
DEL
um die Auswahl zu löschen, und geben dann ein fname
. Wenn delete-selection-mode
aktiviert, können Sie den DEL
Strich überspringen .
Zusammenfassend sehen die delete-selection-mode
aktivierten Tastenanschläge bei aktiviertem Status wie folgt aus : C-\\\fname
.
Verwenden von change-inner
Ich bin auch auf ein change-inner
Paket des expand-region
Autors Magnars gestoßen (das expand-region
als Back-End verwendet wird), um genau das zu tun, was der Vim ci
tut (und auch das Äußere zu ändern ).
Aus dem Paket README:
change-inner
gibt dir vims ci
befehl und baut darauf auf expand-region
. Es lässt sich am einfachsten anhand eines Beispiels erklären:
function test() {
return "semantic kill";
}
Mit Punkt nach dem Wort Semantik
change-inner "
würde den Inhalt des Strings
change-outer "
töten würde den gesamten String
change-inner {
töten würde die return-Anweisung
change-outer {
töten würde den gesamten Block töten
ref = open(|'specific-file-name');
,C-M-k
wird gebenref = open(|);
. Zitate sind auch ausgewogene Sexps .delete-everything-inside-parens
so etwas, nichtdelete-first-sexp-inside-parens
.evil
emuliert den größten Teil von Vim und erstellt sofort Textobjekte.Mit anderen Worten, wenn
evil
aktiviert und die Standardtastenbindungen verwendet werden,ci(
wird genau das getan, was Sie verlangen: Ändern Sie, was in den umschließenden Klammern steht.Genauer gesagt
ci(
Willen Ketteevil-change
zuevil-inner-paren
. Sie können auch beliebig eigene Textobjekte erstellen.quelle
evil
, warum sollten Sie dann die Nicht-evil
Alternative wollen?Smartparens verwenden
Töten
1) Verwenden Sie
C-M-u
(sp-backward-up-sexp
), um'
Trennzeichen zu entfernen.2) Verwenden Sie
C-0 C-M-k
(0
Präfix +sp-kill-sexp
), um Dinge innerhalb des aktuellen Sexp oderC-k
(sp-kill-hybrid-sexp
) zu töten . Letzteres funktioniert nur, wennsmartparens-strict-mode
es aktiviert ist und das aktuelle Sexp in eine Zeile passt.Markieren und löschen / töten / kopieren
1) Finde deinen Weg zum Anfang von sexp (in diesem Beispiel
C-M-u sp-backward-up-sexp
ist genug), setze eine MarkierungC-SPC
und gehe zum Ende von sexp mitsp-end-of-sexp
.2) Dann können Sie tun, was Sie wollen:
C-w
Region töten, RegionM-w
töten, speichern (kopieren),backspace
löschen, ohne den Kill-Ring zu überladen (nur mitdelete-selection-mode
)Mark-inside-Sexp-Funktion
smartparens
Das Paket hat einesp-mark-sexp
Funktion, die den gesamten nächsten Sexp markiert, dh Trennzeichen und Dinge zwischen ihnen.Mit einer solchen Funktion können Sie Trennzeichen aus der Auswahl entfernen:
Verlassen Sie Ihren Sexp
C-M-u
wiederholt und feuern Sie mark-inside-sexp-using-sp ab und entscheiden Sie dann, was mit der aktiven Region geschehen soll.quelle