Ketika saya di tengah-tengah string looooong, seperti berikut ini
(setq Emacs-beta "Which keyboard shortcut to use for navigating out of a string")
Bisakah saya melewatkannya, tepat sebelum yang pertama "
(setelah Emacs-beta) dengan pintasan?
key-bindings
string
Dieter.Wilhelm
sumber
sumber
C-r " C-b
.Jawaban:
Emacs 25 atau lebih baru
Anda ingin
C-M-u
yang menjalankan perintahbackward-up-list
.sumber
Emacs-24.5 -Q
dalam sebuah string, tapi aku mendapatkan dengan CMu:up-list: Scan error: "Unbalanced parentheses"
?Ini bisa dilakukan seperti ini:
Dalam mode lispy , menekan [akan membawa Anda ke awal daftar yang berisi, keluar dari string apa pun. Setelah Anda berada di awal daftar, Anda dapat menjangkau bagian lain dengan mudah, misalnya, untuk sampai ke akhir
Emacs-beta
pers 2m.sumber
Ini sebenarnya pertanyaan pemrograman Emacs Lisp yang sangat menarik. Kita dapat tetap maju-char atau mundur-char sampai kita menemukan karakter di bawah kursor bukan bagian dari string.
Anda dapat menggunakan wajah font untuk memutuskan apakah karakter di dalam string. Ini adalah trik hebat yang saya pelajari dari flyspell. Secara teori itu tidak sempurna, tetapi di dunia nyata itu bekerja dengan hampir semua mode utama bahasa pemrograman pada Emacs23, Emacs24, Emacs25 .
Ini kode lengkapnya:
Pemakaian:
(goto-edge-by-comparing-font-face 1)
pergi ke tepi kanan,(goto-edge-by-comparing-font-face -1)
ke tepi kiribackward-up-list
tidak terlalu dapat diandalkan dari sudut pandang pengguna karena dirancang sebagai perintah generik berdasarkanscan-sexps
. Misalnya, untuk kodeif (true) { return 'hello world'; }
dalam mode js2, itu akan memindahkan fokus ke{
karakter daripada karakter kutipan tunggal pertama. Untuk kodeprintf("hello world")
dalam mode c ++ -, itu tidak akan berfungsi. Saya diuji dengan Emacs 24.5sumber
backward-char
atauforward-char
jika Anda memindahkan kursor keluar dari tepi.)
. Jadi tergantung pada mode, kode Anda memiliki perilaku yang berbeda.Inilah satu lagi cara (yang cenderung saya gunakan lebih banyak) hanya untuk variasi. Solusinya tidak spesifik untuk string tetapi juga berfungsi untuk kasus penggunaan ini.
iy-go-to-char
(juga tersedia di Melpa).iy-go-to-char-backward
daniy-go-to-char
bindings pilihan Anda. Demi penjelasan ini, katakanlah Anda terikatiy-go-to-char-backward
untukC-c C-,
daniy-go-to-char
untukC-c C-.
.Sekarang jika Anda berada di dalam string, Anda akan memanggil
iy-go-to-char-backward
dan mengetik"
.Itu akan terlihat seperti
C-c C-, "
. Jika Anda telahiy-go-to-char-continue-when-repeating
mengatur ket
(default), menekan"
sekali lagi akan membawa Anda ke"
kejadian char sebelum itu, dan seterusnya.Jika Anda berada di dalam string, dan jika sekarang Anda ingin pergi ke akhir string, Anda akan memanggil
iy-go-to-char
dan mengetik"
.Itu akan terlihat seperti
C-c C-. "
. Jika Anda telahiy-go-to-char-continue-when-repeating
menetapkan ket
(default), menekan"
sekali lagi akan membawa Anda ke"
karakter berikutnya .sumber