выстраивание списков параметров функций с помощью vim - PullRequest
13 голосов
/ 18 сентября 2008

При определении или вызове функций с достаточным количеством аргументов, чтобы охватить несколько строк, я хочу, чтобы vim выстроил их в ряд. Например,

def myfunction(arg1, arg2, arg, ...
               argsN-1, argN)

Идея состоит в том, чтобы аргумент argsN-1 был выровнен с аргументом arg1.

У кого-нибудь есть способ, чтобы это происходило автоматически в vim? Я видел плагин выравнивания для выравнивания знаков равенства (в операторах присваивания) и тому подобное, но я не уверен, что это можно сделать для решения этой проблемы?

Ответы [ 4 ]

11 голосов
/ 18 сентября 2008

Предыдущий постер имел его, но забыл set

:set cino=(0<Enter>

С :help cinoptions-values

The 'cinoptions' option sets how Vim performs indentation.  In the list below,
"N" represents a number of your choice (the number can be negative).  When
there is an 's' after the number, Vim multiplies the number by 'shiftwidth':
"1s" is 'shiftwidth', "2s" is two times 'shiftwidth', etc.  You can use a
decimal point, too: "-0.5s" is minus half a 'shiftwidth'.  The examples below
assume a 'shiftwidth' of 4.

...

    (N    When in unclosed parentheses, indent N characters from the line
          with the unclosed parentheses.  Add a 'shiftwidth' for every
          unclosed parentheses.  When N is 0 or the unclosed parentheses
          is the first non-white character in its line, line up with the
          next non-white character after the unclosed parentheses.
          (default 'shiftwidth' * 2).

            cino=                     cino=(0 >
              if (c1 && (c2 ||          if (c1 && (c2 ||
                          c3))                     c3))
                  foo;                      foo;
              if (c1 &&                 if (c1 &&
                      (c2 || c3))           (c2 || c3))
                 {                         {
7 голосов
/ 18 сентября 2008

Я считаю, что вы должны выполнить команду:

:set cino=(0

Это, конечно, при использовании cindent.

edit: я пропустил "set"

2 голосов
/ 18 сентября 2008
1 голос
/ 19 сентября 2008

вы можете получить хороший результат от использования внешнего инструмента для конкретного языка в качестве фильтра Vim. Например, если вы можете написать конфигурационный файл Perltidy , чтобы сгенерировать желаемое форматирование (похоже, вы захотите установить флаги -lp -vtc = 2 ), вы можете затем передать ваш существующий буфер Vim через него с

:!/path/to/tidy -config /path/to/configfile

если вы собираетесь часто запускать такого рода команды, вы можете определить команду, добавив что-то вроде следующего в ваш .vimrc:

command -range=% Tidy <line1>,<line2>!/path/to/tidy -config /path/to/configfile
...