Dado este código:
#!/bin/bash
_DATABASES=(
"secretX"
"secretmin"
"secretcopyijui"
"secretcroma"
"secretdemo"
"secretdicopy"
"secretflashcolo"
"secretmdat"
"secretneton"
"secretprintshar"
"secretrealjet"
"secretsolumax"
"secretunicopia"
"secretworddigit"
"secretducao"
"secrette"
"secrette_app"
"secretanopecanh"
"secretx_ead"
"secretx_site"
"secretdroppy"
"secret"
)
Quando eu faço gg=G
no vim, o código fica assim:
#!/bin/bash
_DATABASES=(
"secretX"
"secretmin"
"secretcopyijui"
"secretcroma"
"secretdemo"
"secretdicopy"
"secretflashcolo"
"secretmdat"
"secretneton"
"secretprintshar"
"secretrealjet"
"secretsolumax"
"secretunicopia"
"secretworddigit"
"secretducao"
"secrette"
"secrette_app"
"secretanopecanh"
"secretx_ead"
"secretx_site"
"secretdroppy"
"secret"
)
Por quê?
Com arrays menores tudo funciona normalmente, mas quando é um array com mais de 20 elementos, isso acontece...
Testado com outra linguagem (JS, C++, PHP), nenhum comportamento semelhante ocorreu.
Informações:
Vim 7.4.52
Não .vimrc
O
={motion}
operador pode ser definido por uma série de configurações ('equalprg'
,'indentexpr'
,'lisp'
), mas quando todas elas não estão definidas, ele volta a usar o recuo C . Isto é o que está acontecendo aqui.O recuo C destina-se à linguagem C e, principalmente, leva suas dicas nas chaves
{ ... }
e identificadores C, comoif
,else
,while
, etc.Acontece que muito disso é bastante familiar ao bash (e muitas outras linguagens), então isso funciona bem na maior parte do tempo.
Em C, porém, os parênteses são usados para incluir expressões lógicas, em atribuições de variáveis
if
ouwhile
instruções. O Vim deseja formatá-los (assim, deseja acompanhar os conjuntos de parênteses correspondentes), mas deseja colocar alguns limites em quão profundos eles parecem.Como, em C, os parênteses são usados em expressões e geralmente são curtos, o limite padrão para rastreá-los é de 20 linhas.
O [
'cinoptions'
] pode controlar muitos recuos de C e acontece que tem uma opção para controlar exatamente isso. A)N
opção pode ser usada para ajustar o limite de linha para expressões de parênteses.Por exemplo, para aumentar para 100 linhas:
(Ou para reduzir para 10, use
:set cinoptions=)10
.)Isso pode explicar o que está acontecendo e é possivelmente um hack rápido que pode ser transformado em uma solução útil... Mas a solução adequada aqui é definir
'indentexpr'
adequadamente para o idioma que você está escrevendo. (Lembre-se, o recuo C só entra em ação quando'indentexpr'
não está definido.)Na verdade, o Vim envia um plug-in para recuar scripts de shell, talvez você simplesmente não o tenha ativado. Certifique-se de ter este comando em seu
.vimrc
:E, em seguida, certifique-se de que seu script de shell esteja sendo reconhecido como type
sh
:Se não estiver, defina-o (talvez seja necessário investigar por que isso não está acontecendo):
Você pode verificar novamente
'indentexpr'
se foi definido:Com essas configurações ativadas,
=
funcionará como você espera em um script de shell.