Отметить блок на основе уровня отступа в Vim - PullRequest
8 голосов
/ 11 сентября 2011

Можно ли пометить блок в Vim на основе уже имеющегося отступа? Аналогично v {.

Это было бы чрезвычайно полезно для языков программирования с чувствительным к пробелам синтаксисом (таких как Haskell и Python).

Например, отметьте все между первым let и return в этой функции:

checkArg (com:arg) s d ns 
  | com == "add-source " = do
      let s' = v ++ s
      lift $ saveLinks s'
      return (s', d)
  | com == "remove-source" = do
      let s' = filter (not . hasWord str) s
      lift $ saveLinks s'
      return (s', d)

http://en.wikipedia.org/wiki/Off-side_rule

Ответы [ 2 ]

7 голосов
/ 11 сентября 2011

Я использую плагин для отступа :

Этот плагин определяет новый текстовый объект на основе уровней отступов. Это очень полезно в таких языках, как Python, в которых синтаксис определяет область с точки зрения отступа. Использование объектов, определенных в этот плагин, целую структуру if можно быстро выбрать, для Пример.

При этом вы можете выбирать, удалять, изменять и т. Д. Блоки, используя стандартные команды текстового объекта Vim, используя «i» и «a» для обозначения блока, в котором вы находитесь: «vii», «dii» , так далее. Он не зависит от языка, но особенно полезен / актуален для языков со структурой пробелов, таких как Python.

4 голосов
/ 18 июля 2012

Плагин, с которым связан Jeet, выглядит аккуратно, но вот простая альтернатива.

Если у вас set foldmethod=indent ...

Вы можете использовать визуальный выбор блока.

Итак, начиная со строки 3, просто наберите V]z.

:help fold-commands

ПЕРЕМЕЩЕНИЕ НА ПОЛЯХ

Перейти к началу текущего открытого сгиба. Если уже в начале, перейдите к началу сгиба, который содержит его. Если нет сгибов, команда не выполняется. Когда используется счетчик, повторяется команда [количество] раз.

] г

Перейти к концу текущего открытого сгиба. Если уже в конце, переместитесь в конец сгиба, в котором он находится. Если нет сгибов, команда не выполняется. Когда используется счет, повторяется команда [количество] раз.

ZJ

Переместиться вниз к началу следующего сгиба. Закрытая складка считается одной складкой. Когда используется счетчик, повторяется команда [количество] раз. Эту команду можно использовать после оператора.

гк

Перейти вверх до конца предыдущего сгиба. Закрытая складка считается одной складкой. Когда используется счетчик, повторяется команда [количество] раз. Эту команду можно использовать после оператора.

...