Встановіть область для включення дужок, що додаються


9

Починаючи з точки або активної області, як я швидко (одним натисканням клавіші / команди) "розгорнути", щоб включити наступний набір вкладених дужок?

Якщо я розпочну з: ( |означає пункт)

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

Або якщо я розпочну з: ( <і >скобіть обраний регіон)

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

Я хочу закінчити

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

Відповіді:


10

Використовуйте expand-region.el :

Область розширення збільшує вибрану область на семантичні одиниці. Просто продовжуйте натискати клавішу, поки вона не вибере те, що потрібно.

Приклад:

(setq alphabet-start "abc def")

За допомогою курсору на c воно починається з позначення всього слова abc, потім розгортається до вмісту лапок abc def, потім до всієї цитати "abc def", потім до вмісту sexp setq alphabet-start "abc def "і, нарешті, на весь sexp.

Ви можете налаштувати його так:

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

Якщо ви розгорнете занадто далеко, ви можете знову укласти регіон із негативним префіксом.


1
Для довідки expand-regionвикликається конкретна функція для негайного маркування списку er/mark-outside-pairs.
няня

4

Я згоден, ви повинні спробувати, expand-regionяк було запропоновано в іншій відповіді (за яку я голосую).

Але про всяк випадок, якщо ви не знайомі з відповідними вбудованими командами:

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

У вашому першому прикладі, де немає регіону, ви можете використовувати C-M-u C-M-SPCдля позначення додаючого списку. Якщо вже є обрана область, ці команди розширюють її. Тож якщо 42вибрано, і ви натиснули C-M-uйого, це поширить вибір назад до початку списку, але не буде включати параметр закриття.

Тож за відсутності чогось подібного, expand-regionя б намагався C-gскасувати будь-який поточний вибір, C-M-uщоб потім повернути стільки потрібних паронів, щоб потім C-M-SPCпозначити


3

Що стосується активного регіону, hу lispy будете робити те, що хочете. Дивіться мою недавню вступну публікацію .

У першому випадку вам потрібно M-m h.

оновлення: усі варіанти, які у вас є lispy

Починаючи з:

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

Тут ~позначається позначка (початок регіону) і |позначається точка (кінець області).

  1. З hвами ви отримуєте:

    (defn foo [x] |(+ x 42)~)
    
  2. З lвами ви отримуєте:

    (defn foo [x] ~(+ x 42)|)
    
  3. Коли kви отримуєте (не можна змінити j):

    (defn foo [x] (+ ~x| 42))
    
  4. З 2kабо kkотримуєте:

    (defn foo [x] (~+| x 42))
    
  5. З dвами ви отримуєте:

    (defn foo [x] (+ x |42~))
    
  6. Коли d>ви отримуєте (не можна змінити <):

    (defn foo [x] (+ |x 42~))
    
  7. З d2>або d>>отримуєте:

    (defn foo [x] (|+ x 42~))
    
  8. З mвами ви отримуєте:

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

Просто підсумувати, коли область активна, h, j, k, l є стрілки , які рухають область. >зростає область на одну семантичну одиницю в напрямку точки. <скорочує область на одну смислову одиницю в напрямку точки. mдеактивує марку. iвибирає перший елемент регіону та dобмінюється точкою та позначкою.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.