Подтвердить что ты не робот

Как настроить vim, чтобы не добавлять комментарии в начале строк при редактировании файлов python

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

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

for i in range(10):
    #

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

Он перемещается таким образом, с помощью vim.

for i in range(10):
#

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

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

4b9b3361

Ответ 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>, а затем нажатие "." для повторной установки предыдущей вставки. Я еще не нашел решение.

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