Bir looooong dizesinin ortasında olduğumda, aşağıdaki gibi
(setq Emacs-beta "Which keyboard shortcut to use for navigating out of a string")
"
Bir kısayol ile ilkinden (Emacs-beta'dan sonra) hemen önce atlayabilir miyim ?
Bir looooong dizesinin ortasında olduğumda, aşağıdaki gibi
(setq Emacs-beta "Which keyboard shortcut to use for navigating out of a string")
"
Bir kısayol ile ilkinden (Emacs-beta'dan sonra) hemen önce atlayabilir miyim ?
Yanıtlar:
C-M-u
Hangi komutu çalıştırdığınızı istiyorsunuz backward-up-list
.
Bir parantez düzeyinden geriye doğru gidin. Bu komut, geçerli dil modu tarafından tanımlanan diğer parantez benzeri ifadelerde de çalışır.
ESCAPE-STRINGS sıfır değilse (etkileşimli olduğu gibi), kapalı dizelerden de çıkın.
Emacs-24.5 -Q
bir dizede, ama CMU ile alıyorum: up-list: Scan error: "Unbalanced parentheses"
?
Böyle yapılabilir:
(defun exit-string-backwards ()
(interactive)
(goto-char (nth 8 (syntax-ppss))))
In lispy-mode , pres
[herhangi bir dize çıkarken içeren listenin başlangıcına getirecektir. Listenin başlangıcına girdikten sonra, örneğin Emacs-beta
basının sonuna ulaşmak için diğer parçalara kolayca ulaşabilirsiniz 2m.
Bu aslında çok ilginç bir Emacs Lisp programlama sorusu. İmlecin altındaki karakterin dizenin parçası olmadığını bulana kadar ileri veya geri karakterini tutabiliriz.
Karakterin dizenin içinde olup olmadığına karar vermek için yazı tipi yüzünü kullanabilirsiniz. Bu, sineklikten öğrendiğim harika bir numara. Teorik olarak mükemmel değildir, ancak gerçek dünyada Emacs23, Emacs24, Emacs25'teki hemen hemen her programlama dilinin ana modlarıyla çalışır .
İşte tam kod:
(defun font-face-is-similar (f1 f2)
(let (rlt)
;; (message "f1=%s f2=%s" f1 f2)
;; in emacs-lisp-mode, the '^' from "^abde" has list of faces:
;; (font-lock-negation-char-face font-lock-string-face)
(if (listp f1) (setq f1 (nth 1 f1)))
(if (listp f2) (setq f2 (nth 1 f2)))
(if (eq f1 f2) (setq rlt t)
;; C++ comment has different font face for limit and content
;; f1 or f2 could be a function object because of rainbow mode
(if (and (string-match "-comment-" (format "%s" f1)) (string-match "-comment-" (format "%s" f2)))
(setq rlt t)))
rlt))
(defun goto-edge-by-comparing-font-face (&optional step)
"Goto either the begin or end of string/comment/whatever.
If step is -1, go backward."
(interactive "P")
(let ((cf (get-text-property (point) 'face))
(p (point))
rlt
found
end)
(unless step (setq step 1)) ;default value
(setq end (if (> step 0) (point-max) (point-min)))
(while (and (not found) (not (= end p)))
(if (not (font-face-is-similar (get-text-property p 'face) cf))
(setq found t)
(setq p (+ p step))))
(if found (setq rlt (- p step))
(setq rlt p))
;; (message "rlt=%s found=%s" rlt found)
(goto-char rlt)))
Kullanımı:
(goto-edge-by-comparing-font-face 1)
sağ kenara (goto-edge-by-comparing-font-face -1)
git, sol kenara gitbackward-up-list
, kullanıcının bakış açısından çok güvenilir değildir, çünkü genel bir komut olarak tasarlanmıştır scan-sexps
. Örneğin, if (true) { return 'hello world'; }
js2 modundaki kod için , odağı {
ilk tek tırnak karakteri yerine karaktere taşır . printf("hello world")
C ++ - modundaki kod için çalışmaz. Emacs 24.5 ile test ettim
backward-char
veya forward-char
imleci kenarın dışına taşırsanız.
)
. Modlara bağlı olarak, kodunuzun farklı davranışları vardır.
İşte sadece çeşitlilik için bir yol daha (ki daha fazla kullanma eğilimindeyim). Çözüm dizelere özgü değildir, ancak bu kullanım durumunda da çalışır.
iy-go-to-char
(Melpa'da da mevcuttur).iy-go-to-char-backward
ve iy-go-to-char
tercih ettiğiniz bağlara bağlayın . Bu açıklama uğruna, diyelim ki bağlı diyelim iy-go-to-char-backward
etmek C-c C-,
ve iy-go-to-char
karşı C-c C-.
.Şimdi dizenin içindeyseniz, arayabilir iy-go-to-char-backward
ve yazabilirsiniz "
.
Öyle görünüyor C-c C-, "
. Eğer varsa iy-go-to-char-continue-when-repeating
ayarlı t
(varsayılan), pres "
kez daha götürecektir "
bundan önce Char meydana vb.
Dizenin içindeyseniz ve şimdi dizenin sonuna gitmek istiyorsanız, arar iy-go-to-char
ve yazarsınız "
.
Öyle görünüyor C-c C-. "
. Eğer varsa iy-go-to-char-continue-when-repeating
ayarlı t
(varsayılan), pres "
kez daha sonraki götürecektir "
karakter oluşumu.
C-r " C-b
.