paredit.vim переместить внутренний список из вложенного списка

Я использую Vim для редактирования кода Clojure и использую paredit, так как Emacsen обычно говорит о том, насколько хорош Emacs, как только вы его освоите.

Если у меня есть выражение, которое передает лямбду функции:

(wrapper-func (fn [] whatever))

И я хочу изменить его так, чтобы у меня осталась только внутренняя лямбда:

(fn [] whatever)

Как правильно это сделать с помощью paredit? Я продолжаю расстраиваться и возвращаюсь к балансировке скобок вручную. Обычно я могу удалить элемент «wrapper-func» в списке, заканчивая:

((fn [] whatever))

Но тогда кажется невозможным удалить внешние или внутренние скобки.


person d11wtq    schedule 27.11.2013    source источник


Ответы (3)


Из справки paredit:

<Leader>I      Raise the current symbol, i.e. replace the current list with
               the current symbol by deleting everything else (except the
               symbol) in the list, including the eclosing pair of parens.
               For example pressing <Leader>I at position marked with |:
                   (aaa (b|bb ccc) ddd)  --->    (aaa |bbb ddd)

Итак, поместите курсор сюда

(wrapper-func (fn [] whatever))
              ^

и нажмите <Leader>I.

Подробнее см. на :help paredit.

person elmart    schedule 27.11.2013
comment
Спасибо. Я бы попытался использовать <Leader>I, но у меня был курсор не в том месте. Полная лажа с моей стороны! - person d11wtq; 27.11.2013

Вот как это сделать без paredit.vim:

Поместите курсор сюда:

(wrapper-func (fn [] whatever))
              ^

Затем введите:

y% : чтобы скопировать внутренний родитель в буфер обмена,

v2a( : для выбора внешнего родителя,

p, чтобы заменить этого внешнего родителя буфером обмена.

Примечание 1: v2a( можно заменить на hva( или vha(, чтобы вывести курсор из внутреннего родителя: тогда a( выбирает внешнего родителя.

Примечание 2. Если вы не хотите включать знаки ( и ), используйте i( вместо a(.

Примечание 3: Если y% заменить на d%, v2a( можно заменить на va(, потому что внешний родитель стал текущим родителем. Это на одну клавишу меньше. но если ваша система выйдет из строя при вводе этого, вы можете потерять содержимое внутреннего родителя.

person user2987828    schedule 27.11.2013

Или просто мы можем сделать это, удерживая курсор на:

  (wrapper-func (fn [] whatever))
                ^

выполнить следующее нажатие клавиши

d{(%x

person dlmeetei    schedule 22.01.2016