Как настроить vim так, чтобы при редактировании файлов python комментарии в начале строк не помещались - PullRequest
50 голосов
/ 09 декабря 2008

Когда я добавляю # в режиме вставки в пустую строку в Vim при редактировании файлов Python, vim перемещает # в начало строки, но я бы хотел, чтобы # вставлялся на уровне вкладки, где я его ввел .

Например, когда пишете это в vim

for i in range(10):
    #

# не остается там, где я его ввел.

Он перемещается вот так, vim.

for i in range(10):
#

Кто-нибудь знает об элементе конфигурации в vim, который изменит это?

Если это поможет, я использую Ubuntu 8.10.

Ответы [ 8 ]

31 голосов
/ 10 декабря 2008

Я нашел ответ здесь http://vim.wikia.com/wiki/Restoring_indent_after_typing_hash

Кажется, что причиной проблемы является опция vim smartindent. Приведенная выше страница описывает обходные пути, но после прочтения справки в smartindent в самом vim (: help smartindent) я решил попробовать cindent вместо smartindent.

я заменил

set smartindent

с

set cindent

в моем файле .vimrc

и до сих пор работает отлично.

Это изменение также исправило поведение '<<' и '>>' для отступа визуальных блоков, которые включают комментарии Python.

В справке vim для smartindent и cindent есть дополнительные параметры конфигурации и информация об отступах (: help smartindent и: help cindent).

20 голосов
/ 22 апреля 2009

@ PolyThinker Хотя я часто вижу ответ на этот вопрос, на мой взгляд, это не очень хорошее решение. Редактор все еще думает, что он должен быть сдвинут влево до конца - проверьте это, нажав == в строке, начинающейся с хэша, или нажав =, пока блок кода с комментариями в нем выделен для повторного отступа.

Я бы настоятельно рекомендовал filetype indent on и удалите строки set smartindent и set autoindent (или set cindent) из вашего vimrc. Кто-то еще (очевидно Дэвид Бустос) был достаточно любезен, чтобы написать для нас полный анализатор отступов; он находится в $ VIMDIRECTORY / indent / python.vim.

(решение Павла cindent, вероятно, работает для python, но filetype indent on в целом гораздо полезнее.)

12 голосов
/ 22 декабря 2008

У меня есть следующие строки в моем .vimrc, кажется, установлен по умолчанию с моим Ubuntu 8.10

set smartindent
inoremap # X^H#
set autoindent

И я не вижу проблемы. Может быть, вы можете попробовать это. (Обратите внимание, что ^ H следует вводить с помощью Ctrl-V Ctrl-H)

4 голосов
/ 15 мая 2014

Мое решение для отступления от #:

Если вы используете cindent, обратите внимание, что он предназначен для кодирования на C и C ++. Здесь # означает, что вы создаете #DEFINE или #MACRO (), поэтому поведение корректно. Но для других языков, где # - комментарий, это раздражает.

У меня сработало следующее:

" cindent       enable specific indenting for C code
" set cin       nocin
set cin

" cinkeys       The default cinkeys causes leading # to unindent to column 0.
"               To prevent this, remove the 0# from the definition.
" set cinkeys=0{,0},0),:,0#,!^F,o,O,e - default
set cinkeys=0{,0},0),:,!^F,o,O,e
2 голосов
/ 20 сентября 2017

Некоторые из других ответов были полезны, но ни одного из них не было достаточно, чтобы Vim не переопределял строку, когда «#» - первый символ. Ответ PolyThinker не сработал для меня, но он дал подсказку, что «#» можно переназначить так, чтобы «вставить символ, затем #, затем удалить лишний символ и поместить курсор в нужное место». Это отображение, которое делает это:

inoremap # X#<left><backspace><right>

Это необходимо, потому что синтаксические пакеты vim обрабатывают '#' как специальный символ, независимо от того, как установлены параметры. Я хочу, чтобы строка, начинающаяся с '#', была такой же, как строка, начинающаяся с любого другого символа. Самым надежным решением, которое я нашел, является приведенное выше отображение, которое фактически меняет первый символ строки.

Примечание: я обнаружил, что это отображение вызывает проблемы после запуска I#<esc> и нажатия кнопки "." повторить предыдущую вставку. Я еще не нашел решения.

2 голосов
/ 22 декабря 2008

Это вызвано функцией «smartindent». Если у вас есть :set smartindent в вашем .vimrc, вам нужно удалить его.

1 голос
/ 10 декабря 2008

Моя конфигурация Vim этого не делает. Вы можете попробовать скрипт python.vim, доступный по этой ссылке: http://www.vim.org/scripts/script.php?script_id=790

0 голосов
/ 04 июня 2014

Я удалил set smartindent из ~/.vimrc, но все равно не отключил smartindent. Когда я открыл .py файл и запустил :set smartindent?, он отобразил smartindent.

Оказывается, что ниже в ~/.vimrc была эта строка:

autocmd BufRead *.py set smartindent cinwords=if,elif,else,for,while,try,except,finally,def,class
                         ^^^^^^^^^^^

После того как я удалил «smartindent» из этой строки, smartindent был окончательно отключен, и мои комментарии снова были правильно сданы в отступ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...