Как настроить vim, чтобы не добавлять комментарии в начале строк при редактировании файлов python
Когда я добавляю # в режиме вставки на пустой строке в Vim при редактировании файлов python, vim перемещает # в начало строки, но я хотел бы, чтобы # был вставлен на уровне вкладки, где я ввел его.
Например, при написании этого в vim
for i in range(10):
#
# не остается там, где я его ввел.
Он перемещается таким образом, с помощью vim.
for i in range(10):
#
Кто-нибудь знает элемент конфигурации в vim, который изменит это?
Если это помогает, я использую Ubuntu 8.10.
Ответы
Ответ 1
Я нашел ответ здесь 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).
Ответ 2
@PolyThinker Хотя я вижу этот ответ очень много на этот вопрос, по-моему, это нехорошее решение. Редактор по-прежнему считает, что его нужно отступать до упора - проверьте это, нажав == на строку, начинающуюся с хэша, или нажав =, в то время как блок кода с комментариями в нем подсвечивается для пояснения.
Я бы настоятельно рекомендовал filetype indent on
и удалить строки set smartindent
и set autoindent
(или set cindent
) из вашего vimrc. Кто-то еще (по-видимому, Дэвид Бустос) был достаточно любезен, чтобы написать полный парсер для отступов для нас; он находится в $VIMDIRECTORY/indent/python.vim.
(Paul cindent
решение, вероятно, работает для python, но filetype indent on
гораздо полезнее.)
Ответ 3
У меня есть следующие строки в моем .vimrc, кажется, установлен по умолчанию с моим Ubuntu 8.10
set smartindent
inoremap # X^H#
set autoindent
И я не вижу проблемы. Может быть, вы можете попробовать это. (Обратите внимание, что ^ H следует вводить Ctrl-V Ctrl-H)
Ответ 4
Мое решение для unindenting #:
Если вы используете cindent, узнайте, что он предназначен для кодирования 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
Ответ 5
Это вызвано функцией "smartindent". Если у вас есть :set smartindent
в вашем .vimrc, вам нужно удалить его.
Ответ 6
Некоторые из других ответов были полезны, но их не было достаточно, чтобы исключить повторную линию Vim, когда "#" является первым символом. Ответ PolyThinker не помог мне, но он дал понять, что "#" можно переустановить для "вставки символа", затем "#" , затем удалить дополнительный символ и поместить курсор туда, где он должен быть ". Это отображение, которое делает это:
inoremap # X#<left><backspace><right>
Это необходимо, потому что синтаксические пакеты vim, похоже, рассматривают "#" как специальный символ, независимо от того, как устанавливаются параметры. Я хочу, чтобы строка, начинающаяся с "#" , была такой же, как строка, начинающаяся с любого другого символа. Наиболее надежным решением, которое я нашел, является приведенное выше сопоставление, которое фактически меняет первый символ линии.
Примечание. Я обнаружил, что это отображение вызывает проблемы после запуска I#<esc>
, а затем нажатие "." для повторной установки предыдущей вставки. Я еще не нашел решение.
Ответ 7
Моя конфигурация Vim этого не делает. Вы можете попробовать python.vim script, доступный по этой ссылке: http://www.vim.org/scripts/script.php?script_id=790
Ответ 8
Я удалил 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 был окончательно отключен, и мои комментарии снова были отложены.