Qual configuração no vim contraria a recusa de smartindent aos comentários travessão # em scripts shell?

StackOverflow https://stackoverflow.com/questions/385327

  •  23-08-2019
  •  | 
  •  

Pergunta

Eu recentemente comecei a usar o vim 7 (anteriormente vim 6) e a definição smartindent. Para a maior parte, ele funciona bem, embora eu estou tão acostumado a digitar um guia depois de uma chave de abertura que é quase contra-produtivo.

No entanto, há um pedaço de comportamento maníaco. Ao editar um script shell, eu tento criar um comentário no nível travessão atual, mas smartindent não terá nada a ver com isso. Ele insiste que o comentário deve estar no nível 0 (sem travessão). O que é pior, ele quebra shift-direito ( '>>' e amigos) para que eles não funcionam. Esta é a insubordinação de imediato, e eu gostaria de saber qual é a melhor maneira de corrigir isso?

(Eu também não estou interessado nas idéias de smartindent sobre o recuo then após if.)

soluções preferenciais vai me salvar contusão Manual - Eu estou sendo preguiçoso. Uma opção seria 'desligar smartindent ao editar scripts shell (deixá-lo ligado para o resto). Outra opção seria orientações sobre como encontrar o script de controle para smartindent eo que editar para alterar as características que eu não gosto. A opção final (que eu não preciso de conselhos sobre como fazer - apenas a sugestão de que é o melhor, ou única, maneira de restaurar a sanidade). É deixar smartindent unset

Eu vi a questão vagamente relacionada em " (PHP e) vim irritante regras Unindent " ; ele não me dar a resposta direta, embora talvez o cindent e itens relacionados mencionados no há, de facto parte da resposta.

Foi útil?

Solução

Encontre o arquivo travessão, (por exemplo /usr/share/vim/vim71/indent/sh.vim no meu sistema)

Esta linha se parece com o problema:

setlocal indentkeys-=:,0#

Talvez você pode corrigir isso no seu .vimrc ou carregar um arquivo travessão personalizado manualmente.

edit: Parece mais complicado do que eu pensava, mas talvez haja algo especificamente definido no arquivo o recuo que você precisa para corrigir

.

2ª edição: Parece que eu estava completamente errado, Check out:

Restaurar travessão após a digitação de hash

ou

howto -configure-vim-para-não-put-comments-at-the-beginning-of-linhas-enquanto-edição

Outras dicas

Bem, depois de explorar algumas opções, incluindo o uso de ':set cindent' em vez de ':set smartindent', eu acabei voltando a usar apenas ':set autoindent'. Provavelmente há maneiras de fazer esta coisa funciona exatamente como eu quero que ele, mas é o suficiente confuso e complicadas o suficiente para que eu não posso ser incomodado. Eu trabalhei muito bem com autoindent para os anos 20 e tantos anteriores, e os benefícios dos sinos e assobios extra fornecidos pelo smartindent são compensados ??pelo que eu considero como o seu mau comportamento.

Obrigado, Juan, para a sua assistência. Acredite ou não, isso não ajuda -. Bastante

Eu também descobri um par de outros comandos puro, porém, enquanto seguimento a esta:

>i}
>a}

Estas direita shift-o bloco de código que você está. Os 'i' versão travessões do corpo e não as chaves de fechamento (o meu estilo preferido), e dos a 'travessões Versão as chaves de fechamento para (a versão que está requerida no trabalho).

Além disso, você pode aplicar qualificadores para '%' em comandos executados no shell:

:make %:r.o

Este seria executado make sobre o 'root' do nome do arquivo atual (ou de '%:r') seguido por '.o'. Ou, em outras palavras, se eu estou editando somefile.c, este executa make somefile.o.

Adicione a linha abaixo em seu .vimrc

travessão filetype on

(que irá definir o modo de recuo à direita, dependendo do tipo de arquivo)

Eu tive esse mesmo problema por um longo tempo, até que percebi que autoindent e smartindent são ambos desnecessário se "indent filetype em" está definido no seu vimrc - 'travessão filetype em' usa o travessão / sh.vim (ou qualquer idioma) arquivo em seu diretório vim para descobrir as regras de recuo, e autoindent e smartindent ambos podem interferir com ela.

Eu não testei isso com sh, mas perl repente começou a se comportar corretamente quando eu mudei.

Sidenote: redirecionamento de Juan, "Restaurando travessão depois de hash de digitação", não é uma boa solução - enquanto ele não corrigir o problema em uma situação (código digitando), isso não muda a forma como o editor acha que deve ser recuado, assim que uma re-indent (= visuais, ou normal ==) vai empurrá-lo de volta para a esquerda.

Eu tenho as seguintes linhas no meu .vimrc e eu não observar o problema.

set smartindent
inoremap # X^H#

Eu costumava ter Conjunto autoindent , depois destas duas linhas, mas parece que ele não tem efeito.

Sim, isso é muito irritante. smartindent é realmente apenas para C como línguas. Veja como habilitar o apropriado recuo baseada na linguagem em: http://www.pixelbeat.org/settings/.vimrc

A resposta anterior sugerindo:

: inoremap # X ^ H #

é excelente. É a resposta sugerida pela documentação VIM no ": ajuda smartindent". Note-se que ^ H é inserido usando CTRL-V CTRL-H. A seção relevante da documentação está abaixo.

    When typing '#' as the first character in a new line, the indent for
    that line is removed, the '#' is put in the first column.  The indent
    is restored for the next line.  If you don't want this, use this
    mapping: ":inoremap # X^H#", where ^H is entered with CTRL-V CTRL-H.
    When using the ">>" command, lines starting with '#' are not shifted
    right.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top