Wie ersetze ich das aktuelle Wort unter dem Cursor in Emacs?
Ich weiß, dass ich query-replace oder replace-string verwenden kann, aber jedes Mal, wenn ich dies tue, muss ich den gesamten String eingeben, der ersetzt werden soll. Dies ist nur ärgerlich.
Vi hat ein äquivalentes Kommando cword und ich kann eine Abkürzung verwenden, um das Wort unter dem Cursor zum Ersetzen zu ziehen:
nmap <leader>z :%s#\<<C-r>=expand("<cword>")<CR>\>#
Weiß jemand, wie man es mit Emacs macht?
Antworten:
Verwenden copy-paste:
M-d C-_ M-x replace-string RET C-y
(kill-word
,undo
,replace-string
,yank
). Wenn Sie bereits den Ersatz gestartet haben, können Sie auf den ursprünglichen Puffer wechseln mit den üblichen Fenstern der Copy-Paste zu tun oder Schaltbefehle Puffer:M-x replace-string RET … C-x o M-d C-_ C-x o C-y
. Sie können ein Präfixargument fürM-d
(z. B.ESC 4 2 M-d
) verwenden, um mehrere Wörter zu ersetzen.Wenn Sie vorhaben, ein oder mehrere Wörter am Cursor zu ersetzen, können Sie stattdessen mit der inkrementellen Suche (
C-s
)C-w
beginnen und mit das Wort unter dem Cursor suchen. Drücken Sie dannM-%
, um zu zu wechselnreplace-string
.quelle
Die inkrementelle Suche bietet diese Funktion, die Ersetzungsfunktionen jedoch nicht. Glücklicherweise inkrementelle Suche hat eine Möglichkeit haben , in den Modus zu ersetzen , sobald Sie einen Suchbegriff ausgewählt haben. So:
Wie Sie wahrscheinlich aus der M-%normalen Verwendung wissen , handelt es sich um einen Abfrageaustauschmodus, in dem Sie aufgefordert werden, was mit jeder Übereinstimmung zu tun ist. Wenn Sie nur alle ersetzen möchten, treffen Sie !auf das erste Spiel
quelle
quelle
Ich bin absolut neu in Emacs, aber ich kann Folgendes vorschlagen:
Jetzt können Sie ein neues Wort schreiben. Funktioniert fast wie
cw
in vimquelle
Wenn Sie in das Suchen und Ersetzen wechseln, indem Sie
M-S-%
nurM-n
das Wort unter dem Cursor eingeben, wird es durch erneutes Drücken in "Symboltrennzeichen" eingeschlossen.quelle
Ich hatte Probleme und wollte dasselbe, seit ich von Vim zu Emacs gezogen bin.
Nach einigen Nachforschungen und Experimenten habe ich die folgende Funktion entwickelt, mit der Sie dasselbe mit dem installierten Evil-Paket oder mit Spacemacs tun können.
Es funktioniert auch mit aktivierter Region (oder visueller Auswahl in vim Begriff) und das kann sehr nützlich sein, um ein Wort wie abc-def-hij zu ersetzen:
Definieren Sie dann in Ihrem Init.el die gleiche Schlüsselbindung:
Die Tastenbelegung unterscheidet sich ein wenig von der von vim, nämlich "space z", aber ich habe nicht herausgefunden, wie ich das in Emacs abbilden kann, wenn der böse Modus vorhanden ist. beschwere dich weiterhin nicht über ein Präfix etc und ich bin relativ neu bei Emacs. Aber immer noch nicht schlecht und ich bin im Moment mit dieser Lösung zufrieden.
quelle
Dies wurde bereits beantwortet und ich kann keinen Kommentar abgeben, da ich noch nicht genug Ruf habe. Aber was Sie suchen, ist
ciw
in vim.In Emacs ist mir diese Kombination am nächsten gekommen:
M-b M-d
Dies kehrt zum Anfang des Wortes zurück, auf dem sich der Cursor befindet, und löscht das Wort.
quelle