Как заставить vim останавливать отступы комментариев [дубликат]

Еще одна альтернатива, которая кажется более быстрой, чем REGEXP на моем компьютере, -

SELECT * FROM myTable WHERE col1*0 != col1;

Это выберет все строки, где col1 начинается с числового значения.

49
задан Jonathan Leffler 22 December 2008 в 09:21
поделиться

8 ответов

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

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

Я заменил

set smartindent

с

set cindent

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

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

Это изменило и зафиксировало поведение ' & Lt; & Lt;» и '>>' для отступов визуальных блоков, которые включают комментарии к python.

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

31
ответ дан Jonathan Leffler 27 August 2018 в 12:44
поделиться
  • 1
    Ах, у меня есть "filetype plugin indent on & quot; в моем .vimrc, возможно, это отвечает за то, что он работает правильно для меня. vimdoc.sourceforge.net/htmldoc/filetype.html – m0j0 9 December 2008 в 23:38
  • 2
    Спас мой день. +1! :) – Ory Band 7 May 2014 в 20:55
  • 3
    есть ли рекомендуемые / общие настройки конфигурации для cindent? – Trevor Boyd Smith 8 July 2015 в 12:50
  • 4
    Это раздражало меня навсегда, и я, наконец, взял 5 минут, чтобы исправить это (звучит, как и большинство проблем с vim, не так ли?). Спасибо за сухарики! – dusktreader 8 March 2017 в 22:02

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

Если вы используете 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
4
ответ дан bearvarine 27 August 2018 в 12:44
поделиться

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

1
ответ дан m0j0 27 August 2018 в 12:44
поделиться
  • 1
    К сожалению, это не сработало в моем случае, проблема сохраняется при ее использовании. Я использовал версию 2.6.3, потому что я еще не обновлен до python 3.0. Возможно, проблема в файле /usr/share/vim/vim71/indent/python.vim, установленном из пакета Ubuntu vim-runtime? – Paul D. Eden 9 December 2008 в 22:50

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

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

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

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

2
ответ дан piojo 27 August 2018 в 12:44
поделиться

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

set smartindent
inoremap # X^H#
set autoindent

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

11
ответ дан PolyThinker 27 August 2018 в 12:44
поделиться
  • 1
    Это исправление описано в документах (:help smartindent). Я думаю, set autoindent избыточен; smartindent включает в себя – jpyams 6 June 2018 в 16:42

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

2
ответ дан too much php 27 August 2018 в 12:44
поделиться

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

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

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

20
ответ дан Trevor Boyd Smith 27 August 2018 в 12:44
поделиться
  • 1
    Спасибо, это помогло мне. У меня была одна заминка, и вот что я пытался «отпечаток filetype on» & quot; внутри gvim (MacVim) и не видел изменения поведения. Как только я начал тестировать его, добавив его в .vimrc, а затем перезапустив, я увидел изменение поведения. – finity 31 October 2012 в 23:29
  • 2
    Такая же проблема, попробованные принятые решения (и перестановки), поместили 'filetye indent on' в конец .vimrc, а теперь # comment'ing python не дебютирует. Но теперь это то, что нужно для меня. Вздох. – ChuckCottrill 8 February 2016 в 23:19
  • 3
    Отключение smartindent не работает для меня (на обоих ubuntu vim и osx mac-vim). Добавление "отпечатка типа filetype on & quot; к моему $ HOME / .vimrc и перезапуску [g] vim решает мою проблему (как для редактирования сценариев python, так и для bash). – Tzunghsing David Wong 18 April 2017 в 22:21

Я удалил 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
                         ^^^^^^^^^^^

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

0
ответ дан wisbucky 27 August 2018 в 12:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: