Kiedy jestem w środku długiego ciągu, jak poniżej
(setq Emacs-beta "Which keyboard shortcut to use for navigating out of a string")
Czy mogę go pominąć tuż przed pierwszym "
(po Emacs-beta) skrótem?
key-bindings
string
Dieter.Wilhelm
źródło
źródło
C-r " C-b
.Odpowiedzi:
Emacs 25 lub nowszy
Chcesz,
C-M-u
który uruchamia poleceniebackward-up-list
.źródło
Emacs-24.5 -Q
na sznurku, ale ja dostaję z CMU:up-list: Scan error: "Unbalanced parentheses"
?Można to zrobić w następujący sposób:
W trybie lispy naciśnięcie [spowoduje przejście do początku listy zawierającej, opuszczając dowolny ciąg. Gdy znajdziesz się na początku listy, możesz łatwo dotrzeć do innych części, na przykład, aby dotrzeć do końca
Emacs-beta
prasy 2m.źródło
To jest naprawdę bardzo interesujące pytanie programistyczne Emacsa Lispa. Możemy zachować znak do przodu lub do tyłu, dopóki nie znajdziemy znaku pod kursorem, który nie jest częścią ciągu.
Możesz użyć powierzchni czcionki, aby zdecydować, czy znak znajduje się w ciągu. To świetna sztuczka, której nauczyłem się od flyspell. Teoretycznie nie jest idealny, ale w prawdziwym świecie działa z prawie wszystkimi głównymi trybami języka programowania na Emacs23, Emacs24, Emacs25 .
Oto pełny kod:
Stosowanie:
(goto-edge-by-comparing-font-face 1)
idź do prawej krawędzi,(goto-edge-by-comparing-font-face -1)
idź do lewej krawędzibackward-up-list
nie jest bardzo wiarygodny z punktu widzenia użytkownika, ponieważ został zaprojektowany jako ogólne polecenie oparte nascan-sexps
. Na przykład w przypadku koduif (true) { return 'hello world'; }
w trybie js2 przenosi fokus na{
znak zamiast pierwszego znaku pojedynczego cudzysłowu. Dla koduprintf("hello world")
w trybie c ++ nie zadziała. Testowałem z Emacsem 24.5źródło
backward-char
lubforward-char
jeśli przesuniesz kursor poza krawędź.)
. W zależności od trybów kod ma różne zachowania.Oto jeszcze jeden sposób (którego zwykle używam) tylko dla odmiany. Rozwiązanie nie jest specyficzne dla ciągów, ale działa również w tym przypadku użycia.
iy-go-to-char
(dostępne również w Melpa).iy-go-to-char-backward
iiy-go-to-char
preferowane wiązania. Ze względu na to wyjaśnienie, powiedzmy, że związałeśiy-go-to-char-backward
sięC-c C-,
iiy-go-to-char
doC-c C-.
.Teraz, jeśli jesteś w ciągu, zadzwonisz
iy-go-to-char-backward
i napiszesz"
.To by wyglądało
C-c C-, "
. Jeśliiy-go-to-char-continue-when-repeating
ustawiłeśt
(domyślnie),"
ponowne naciśnięcie spowoduje przejście do"
wystąpienia znaku przedtem i tak dalej.Jeśli znajdujesz się w ciągu i jeśli chcesz teraz przejść do końca łańcucha, zadzwoń
iy-go-to-char
i wpisz"
.To by wyglądało
C-c C-. "
. Jeśliiy-go-to-char-continue-when-repeating
ustawiłeśt
(domyślnie),"
ponowne naciśnięcie spowoduje przejście do następnego"
wystąpienia znaku.źródło