Como configurar vim para não colocar comentários no início de linhas enquanto os arquivos de edição python

votos
47

Quando eu adicionar um # no modo de inserção em uma linha vazia no Vim ao editar arquivos python, vim move o # para o início da linha, mas eu gostaria que o # para ser inserido no nível do guia onde entrei.

Por exemplo, ao escrever isso no vim

for i in range(10):
    #

o # não ficar lá, onde entrei.

Ele é movido como assim, por vim.

for i in range(10):
#

Alguém sabe de um item de configuração no vim que mudaria isso?

Se isso ajuda, eu estou usando o Ubuntu 8.10.

Publicado 09/12/2008 em 21:21
fonte usuário
Em outras línguas...                            


8 respostas

votos
1

Minha configuração Vim não faz isso. Você pode tentar o script python.vim disponível a partir deste link: http://www.vim.org/scripts/script.php?script_id=790

Respondeu 09/12/2008 em 22:18
fonte usuário

votos
31

Eu encontrei uma resposta aqui http://vim.wikia.com/wiki/Restoring_indent_after_typing_hash

Parece que a opção smartindent vim é a causa do problema. A página referenciada acima descreve trabalho-a-rodadas, mas depois de ler a ajuda em smartindent em si vim (: ajuda smartindent), eu decidi tentar cindent vez de smartindent.

Troquei

set smartindent

com

set cindent

no meu arquivo .vimrc

e até agora está funcionando perfeitamente.

Isso mudou também fixa o comportamento de '<<' e '>>' para recuar blocos visuais que incluem comentários python.

Há mais opções de configuração para e informações sobre recuo na ajuda vim para smartindent e cindent (: ajuda smartindent e: help cindent).

Respondeu 09/12/2008 em 23:07
fonte usuário

votos
2

É causada pelo recurso 'smartindent'. Se você tem :set smartindentem seu .vimrc que você precisa para removê-lo.

Respondeu 22/12/2008 em 03:13
fonte usuário

votos
10

Eu tenho as seguintes linhas no meu .vimrc, parece estar instalado por padrão com o meu Ubuntu 8.10

set smartindent
inoremap # X^H#
set autoindent

E eu não observar o problema. Talvez você pode tentar isso. (Note-se que ^ H deve ser introduzido por Ctrl-V Ctrl-H)

Respondeu 22/12/2008 em 08:27
fonte usuário

votos
19

@PolyThinker Embora eu ver que resposta muito a esta pergunta, na minha opinião, não é uma boa solução. O editor ainda pensa que deve ser recuado todo o caminho para a esquerda - verificar isso empurrando == em uma linha que começa com um hash, ou empurrando = enquanto um bloco de código com comentários em que é destacado para reindent.

Eu recomendaria fortemente filetype indent on, e remover os set smartindente set autoindent(ou set cindentlinhas) de seu vimrc. Alguém (appparently David Bustos) foi gentil o suficiente para escrever um parser recuo completo para nós; ele está localizado em US $ VIMDIRECTORY / travessão / python.vim.

(De Paulo cindentsolução provavelmente trabalha para python, mas filetype indent oné muito mais geralmente útil.)

Respondeu 22/04/2009 em 15:07
fonte usuário

votos
4

Minha solução para o unindenting de #:

Se você usar cindent, reconhecer que ele é projetado para C e C ++ codificação. Aqui, um # significa que você está criando um #DEFINE ou #MACRO (), então o comportamento é correto. Mas para outros idiomas onde # é um comentário, é irritante.

O seguinte trabalhou para mim:

" 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
Respondeu 15/05/2014 em 16:57
fonte usuário

votos
0

I removido set smartindenta partir ~/.vimrcmas ainda não desativar smartindent. Quando eu abri um arquivo .py e correu :set smartindent?-lo exibido smartindent.

Acontece que mais abaixo na ~/.vimrcera esta linha:

autocmd BufRead *.py set smartindent cinwords=if,elif,else,for,while,try,except,finally,def,class
                         ^^^^^^^^^^^

Uma vez que eu excluído "smartindent" a partir dessa linha, em seguida, smartindent foi finalmente desativada e os meus comentários foram recuado corretamente novamente.

Respondeu 04/06/2014 em 19:38
fonte usuário

votos
2

Algumas das outras respostas foram úteis, mas nenhum foram suficientes para impedir Vim de reindenting uma linha quando '#' é o primeiro caractere. A resposta de PolyThinker não funcionou para mim, mas deu uma pista de que '#' poderia ser remapeado para "inserir um caractere, em seguida, #, em seguida, eliminar o caráter extra e colocar o cursor onde deveria estar". Este é o mapeamento que faz isso:

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

Isto é necessário porque os pacotes de sintaxe de vim parecem tratar '#' como um caractere especial, não importa como as opções são definidas. Eu quero uma linha iniciada com '#' para ser o mesmo que uma linha iniciada com qualquer outro personagem. A solução mais confiável que eu encontrei é o mapeamento acima, que realmente muda primeiro caractere da linha.

Nota: Eu encontrei este mapeamento causa problemas após a execução I#<esc>, em seguida, pressionando "". para refazer a inserção anterior. Eu não encontrei uma solução ainda.

Respondeu 20/09/2017 em 05:07
fonte usuário

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