Setel wilayah untuk menyertakan tanda kurung tertutup

9

Dimulai dengan titik atau wilayah aktif, bagaimana saya dengan cepat (dalam satu penekanan tombol / perintah) 'memperluas' untuk memasukkan set kurung penutup yang berikutnya?

Jika saya mulai dengan: ( |berarti point)

(defn foo [x] (+ x |42))

Atau jika saya mulai dengan: ( <dan >kurung wilayah yang dipilih)

(defn foo [x] (+ x <42>|))

Saya ingin berakhir dengan

(defn foo [x] <(+ x 42)>|)
David J.
sumber

Jawaban:

10

Gunakan expand-region.el :

Perluas wilayah meningkatkan wilayah yang dipilih oleh unit semantik. Teruslah menekan tombol sampai ia memilih apa yang Anda inginkan.

Sebuah contoh:

(setq alphabet-start "abc def")

Dengan kursor di c, itu dimulai dengan menandai seluruh kata abc, kemudian memperluas ke isi dari kutipan abc def, kemudian ke seluruh kutipan "abc def", kemudian ke isi dari sexp setq abjad-mulai "abc def "dan akhirnya ke seluruh sexp.

Anda dapat mengaturnya seperti ini:

(require 'expand-region)
(global-set-key (kbd "C-=") 'er/expand-region)

Anda dapat mengontrak wilayah lagi dengan awalan negatif, jika Anda memperluas terlalu jauh.

David J.
sumber
1
Untuk referensi, expand-regionfungsi spesifik untuk menandai daftar segera dipanggil er/mark-outside-pairs.
pengasuh
4

Saya setuju Anda harus mencoba expand-regionseperti yang disarankan dalam jawaban lain (yang saya pilih).

Tapi untuk berjaga-jaga jika Anda tidak terbiasa dengan perintah bawaan yang relevan:

C-M-u, backward-up-list
C-M-SPC, mark-sexp

Dalam contoh pertama Anda di mana tidak ada wilayah yang dapat Anda gunakan C-M-u C-M-SPCuntuk menandai daftar terlampir. Jika sudah ada wilayah yang dipilih, perintah-perintah ini memperluasnya. Jadi jika 42dipilih dan Anda menekannya C-M-uakan memperpanjang seleksi mundur ke awal daftar tetapi tidak akan menyertakan paren penutup.

Jadi dengan tidak adanya sesuatu seperti expand-regionsaya akan menekan C-guntuk membatalkan semua pilihan saat ini, kemudian C-M-uuntuk kembali sebanyak parens yang Anda inginkan, kemudian C-M-SPCuntuk menandai

glukas
sumber
3

Dalam kasus wilayah aktif, hdi lispy akan melakukan apa yang Anda inginkan. Lihat posting pengantar terbaru saya .

Dalam kasus pertama, Anda harus melakukannya M-m h.

perbarui: semua opsi yang Anda miliki lispy

Dimulai dengan:

(defn foo [x] (+ x ~42|))

Di sini, ~menunjukkan tanda (awal wilayah), dan |menunjukkan titik (akhir wilayah).

  1. Dengan hAnda dapatkan:

    (defn foo [x] |(+ x 42)~)
    
  2. Dengan lAnda dapatkan:

    (defn foo [x] ~(+ x 42)|)
    
  3. Dengan kAnda dapatkan (tidak dapat dihubungi dengan j):

    (defn foo [x] (+ ~x| 42))
    
  4. Dengan 2katau kkAnda dapatkan:

    (defn foo [x] (~+| x 42))
    
  5. Dengan dAnda dapatkan:

    (defn foo [x] (+ x |42~))
    
  6. Dengan d>Anda dapatkan (tidak dapat dihubungi dengan <):

    (defn foo [x] (+ |x 42~))
    
  7. Dengan d2>atau d>>Anda dapatkan:

    (defn foo [x] (|+ x 42~))
    
  8. Dengan mAnda dapatkan:

    (defn foo [x] (+ x 42|))
    

Hanya untuk meringkas, ketika daerah aktif, h, j, k, l adalah panah yang bergerak wilayah tersebut. >menumbuhkan wilayah dengan satu unit semantik ke arah titik. <menyusut wilayah dengan satu unit semantik ke arah titik. mmenonaktifkan tanda. imemilih elemen pertama dari wilayah tersebut, dan dbertukar titik dan tanda.

abo-abo
sumber