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

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

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

for i in range(10):
    #

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

Он перемещается так: vim.

for i in range(10):
#

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

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

См. Также: stackoverflow.com/questions/191201/…

Dan 14.05.2010 03:39
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
53
1
7 328
8
Перейти к ответу Данный вопрос помечен как решенный

Ответы 8

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

К сожалению, в моем случае это не сработало, проблема сохраняется при его использовании. Я использовал версию 2.6.3, потому что я еще не обновился до python 3.0. Возможно, проблема в файле /usr/share/vim/vim71/indent/python.vim, установленном из пакета Ubuntu vim-runtime?

Paul D. Eden 10.12.2008 00:50
Ответ принят как подходящий

Я нашел здесь ответ 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).

Ах, у меня есть "отступ плагина типа файла" в моем .vimrc, возможно, это отвечает за его правильную работу для меня. vimdoc.sourceforge.net/htmldoc/filetype.html

m0j0 10.12.2008 01:38

Спас мой день. +1! :)

Ory Band 07.05.2014 23:55

есть ли какие-либо рекомендуемые / общие настройки конфигурации для cindent?

Trevor Boyd Smith 08.07.2015 15:50

Это меня вечно раздражало, и я, наконец, потратил 5 минут, чтобы исправить это (похоже на большинство проблем с vim, не так ли?). Спасибо за панировочные сухари!

dusktreader 09.03.2017 00:02

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

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

set smartindent
inoremap # X^H#
set autoindent

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

Это исправление описано в документации (:help smartindent). Я думаю, что set autoindent избыточен; smartindent включает его

jpyams 06.06.2018 19:42

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

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

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

Спасибо - мне это помогло. У меня была одна заминка, и я пробовал использовать "отступ типа файла" в gvim (MacVim) и не заметил изменений в поведении. Как только я начал тестирование, добавив его в .vimrc, а затем перезапустив, я заметил, что поведение изменилось.

finity 01.11.2012 01:29

Та же проблема, попробовал принятые решения (и перестановки), поместил «файловый отступ» в конец .vimrc, и теперь # комментарий python не отменяет / не уступает. Но теперь для меня это автоиндент. Вздох.

ChuckCottrill 09.02.2016 01:19

Отключить smartindent у меня не работает (как на ubuntu vim, так и на osx mac-vim). Добавление «отступа типа файла» в мой $ HOME / .vimrc и перезапуск [g] vim решают мою проблему (при редактировании сценариев python и bash).

Tzunghsing David Wong 19.04.2017 01:21

Мое решение для удаления #:

Если вы используете 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

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

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

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

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

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

Другие вопросы по теме