Как настроить Vim не ставить комментарии в начале строки при редактировании файлов питона

голоса
47

Когда я добавить # в режиме вставки на пустую строку в Vim при редактировании файлов питона, ВИМ перемещает # в начале строки, но я хотел бы, чтобы # быть вставлена ​​на вкладке уровне, где я вошел в нее.

Например, при написании этого в Vim

for i in range(10):
    #

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

Он двигался, как это так, бойкостью.

for i in range(10):
#

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

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

Задан 09/12/2008 в 21:21
источник пользователем
На других языках...                            


8 ответов

голоса
31

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

Кажется, что ВИМ smartindent вариантом является причиной проблемы. Ссылаются страница выше описание работы A-раунды, но после прочтения помощи в smartindent в самом Vim (: помощь smartindent), я решил попробовать cindent вместо smartindent.

Я заменил

set smartindent

с

set cindent

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

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

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

Есть несколько вариантов конфигурации для и информации о вдавливании в VIM помощи для smartindent и cindent (: помощь smartindent и: помощь cindent).

Ответил 09/12/2008 в 23:07
источник пользователем

голоса
19

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

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

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

Ответил 22/04/2009 в 15:07
источник пользователем

голоса
10

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

set smartindent
inoremap # X^H#
set autoindent

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

Ответил 22/12/2008 в 08:27
источник пользователем

голоса
4

Мое решение unindenting из #:

Если вы используете cindent, признают, что он предназначен для C и C ++ кода. Здесь, # означает, что вы создаете #define или # МАКРОС (), так что поведение является правильным. Но для других языков, где # является комментарием, это раздражает.

Далее работал для меня:

" 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
Ответил 15/05/2014 в 16:57
источник пользователем

голоса
2

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

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

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

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

Ответил 20/09/2017 в 05:07
источник пользователем

голоса
2

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

Ответил 22/12/2008 в 03:13
источник пользователем

голоса
1

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

Ответил 09/12/2008 в 22:18
источник пользователем

голоса
0

Я снял 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 был окончательно отключен, и мои комментарии были отступом правильно снова.

Ответил 04/06/2014 в 19:38
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more