В энергии ищите назад соответствие braces/parens

Короткий сценарий Perl ниже - использование кошки для получения uuid не является самым чистым/самым быстрым способом кодировать его, но это сохраняет команду короткой:

perl -e '
  foreach (@ARGV) {
    my $uid=qx|cat /proc/sys/kernel/random/uuid|;
    chomp $uid;
    (my $new=$_)=~s#(.*)\.#$uid.#;
    rename($_, $new)
  }
' *.file_ext

Вышеупомянутое использование файл в/proc на Linux как источник uuids:

[bash#] cat /proc/sys/kernel/random/uuid
d474706f-b18c-4e4b-8762-5ed577c74ac3
9
31.01.2012, 05:12
3 ответа

Если Вы действительно хотите искать назад общие символы соответствия, можно использовать один из них vim- определенные команды:

  • [( ... (перейдите к несопоставленному предыдущему ( символ)
  • [{ ... (перейдите к несопоставленному предыдущему { символ)

Эти две команды имеют соответствие вперед партнерам:

  • ]) ... (перейдите к несопоставленному следующему ) символ)
  • ]} ... (перейдите к несопоставленному следующему } символ)

Существуют другие подобные команды для #ifdef и для комментариев C.

Можно найти больше когда в vim при помощи команды :help %.

4
27.01.2020, 20:07
  • 1
    , который я знаю их, проблема, они находят несопоставленных пар, я должен найти подобранных пар. –  Kevin 16.02.2012, 19:05
  • 2
    @Kevin: Я неправильно понял документы (вздох). Конечно, после того как Вы использовали % затем это идет обоими путями - нахождение подобранного партнера. Кроме того, если в блоке, то вышеупомянутые команды найдут соответствующее соответствие. –  Mei 16.02.2012, 19:07

% найдите соответствующую скобку. Таким образом, если Вы идете (или {это будет искать вперед.

Если Вы будете идти} или), то это будет искать назад.

% не направлено, это просто находит соответствующую скобку.

3
27.01.2020, 20:07
  • 1
    Если я буду позади одной стороны пары, то % найдет, что это - партнер. Если я буду на конце строки, то он не найдет пару раньше строкой. –  Kevin 17.02.2012, 02:20

Я просто попробовал :map ^] ^%%^] = Ctrl+v Ctrl+5 здесь, как аналогия с % = Shift+5).

Это работает на данный конкретный случай, но потому что это не ищет назад от курсора, это будет всегда выбирать первую открывающую скобку на строке и оставлять Ваш курсор в начале строки, если это не найдет соответствия.


Это - лучшее решение; это ужасно и существует, вероятно, много комнаты для упрощения, но я думаю, что семантика является точно правильной (не перемещает курсор, если существует не открытый paren и перемещается в первый открытый paren перед текущим столбцом).

:map ^] ^[:call search("[({[]", "bes", line("."))^M

для

  • ^] = Ctrl+v Ctrl+5
  • ^[ = Ctrl+v Esc
  • ^M = Возврат Ctrl+v
2
27.01.2020, 20:07
  • 1
    Это не вполне будет тем же, если будет две невложенных пары на строке, но это, конечно - лучшее предложение до сих пор, спасибо. –  Kevin 16.02.2012, 19:45
  • 2
    Это будет только работать в блоке, правильно? Если так, затем [( работал бы точно также и не требует a map. –  Mei 16.02.2012, 19:54
  • 3
    Должен был бы быть блок, начинающийся на текущей строке, да. Я нашел больше полного решения хотя, редактирование, происходящее... –  Useless 16.02.2012, 20:12

Теги

Похожие вопросы