Давайте предположим, что я редактирую некоторый код Python в vim, который выглядит примерно так:
myobj.myfunc("Some string parameter that goes on and on and on and on and sometimes doesn't"
"split very"
"neatly over different lines so that"
"it is formatted attractively")
Я бы предпочел переформатировать это так, чтобы он перезагружался до установленного textwidth
мной:
myobj.myfunc("Some string parameter that goes on and on and "
"on and on and sometimes doesn't split very "
"neatly over different lines so that it is "
"formatted attractively")
Есть простой способ сделать это? Если бы это был обычный текстовый абзац gqipили подобное, было бы полезно, но это не будет обрабатывать кавычки, используемые для разделения строки.
Примечание : здесь я спрашиваю конкретно о Python, но в идеале этот ответ будет уместен для многих типов языков программирования, которые допускают продолжение строки.
formatting
line-breaks
filetype-python
Эндрю Ферье
источник
источник
"""multi-line string"""
?Ответы:
О, это сложно. Я думаю, что лучший подход, возможно, макрос, но, скорее, плагин. Вот пример, который я взбил (мне нужно лучшее хобби). Кажется, это работает для меня, но для правильного отступа понадобится плагин для отступа Python. Попробуйте это.
Тогда вы можете использовать его
:call ReformatMultiLines()
и / или использовать в отображении.источник
Если это обычное явление, вам лучше поискать плагин или использовать функцию @Sukima. Однако, если бы я делал это на лету, я бы сделал вот что:
Добавьте новую строку после открывающей и перед закрывающей, чтобы строки находились на отдельных строках.
Выберите строки со строками и удалите окружающие кавычки:
:norm ^x$x
:set tw-=2
gvgq
:set tw+=2
gv:norm I"<Esc>A"
. Вместо того<Esc>
, чтобы вставить буквальный escape, введите ctrl-v, а затем клавишу escape. Так как я отображаю jj, чтобы убежать, я обычно просто набираю jj здесь.источник
:set tw-=2
результатеE487: Argument must be positive: tw-=2
. Синтаксис неверен?:set tw?
. Я предполагаю, что у вас текстовая ширина установлена в 0. Эти шаги предполагают, что текстовая ширина начинается с количества символов, которое вы хотите на строку.s/2/3/
добавить пробел перед закрывающей кавычкой, и ваша длинная строка не будет иметь правильного расстояния между словами.Синтаксический анализ и форматирование кода сложны, особенно для динамических языков, таких как Python.
Вместо того, чтобы пытаться анализировать Python в Vimscript, я рекомендую вам использовать внешний форматтер, такой как yapf . С моим ответом здесь вы можете написать это автоматически при записи:
s:write_cmd()
Функция в другой ответ - я не буду добавлять его здесь , так что я не придется обновлять его в двух местах , если я нахожу ошибку :-)Вы можете также установить
formatprg
наyapf
и вручную форматировать егоgq
.источник
yapf
похоже, не подходит . Тем не менее я согласен, что это выглядит как полезный инструмент.Следующие функции и соответствующие отображения решили эту проблему для меня:
источник