Qu'est-ce paramètre dans vim contrecarre refus de smartindent au tiret # commentaires dans les scripts shell?

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

  •  23-08-2019
  •  | 
  •  

Question

J'ai récemment commencé à utiliser vim 7 (précédemment vim 6) et le réglage de smartindent. Pour la plupart, cela fonctionne bien, mais je suis tellement habitué à taper un onglet après une accolade ouverte qu'il est presque contre-productif.

Cependant, il y a un morceau de comportement maniaque. Lors de l'édition d'un script shell, je tente de créer un commentaire au niveau de retrait actuel, mais smartindent aurai rien à voir avec elle. Il insiste sur le fait que le commentaire doit être au niveau 0 (aucun tiret). Pire encore, il se casse de décalage à droite ( « >> » et les amis) afin qu'ils ne fonctionnent pas. Ceci est pur et simple insubordination, et je voudrais savoir quelle est la meilleure façon de résoudre ce problème?

(je suis pas non plus vif sur les idées de smartindent sur indenter then après if.)

Des solutions préférées me sauver dénigrement manuel - je suis paresseux. Une option serait «désactiver smartindent lors de l'édition des scripts shell (laissez-le pour le reste). Une autre option serait des lignes directrices sur la façon de trouver le script de contrôle pour smartindent et ce qu'il faut modifier pour modifier les caractéristiques que je n'aime pas. La dernière option (que je ne ai pas besoin des conseils sur la façon de le faire - juste le soupçon qu'il est le meilleur, ou seulement, moyen de rétablir le bon sens). Est de laisser smartindent unset

J'ai vu la question vague rapport sur " (PHP et) les règles de désindentation vim ennuyeux " ; il ne me donne pas la réponse directe, mais peut-être le cindent et articles connexes mentionnés là-bas sont en fait une partie de la réponse.

Était-ce utile?

La solution

Recherchez le fichier tiret, (par exemple /usr/share/vim/vim71/indent/sh.vim sur mon système)

Cette ligne ressemble le problème:

setlocal indentkeys-=:,0#

Peut-être que vous pouvez corriger cela dans votre .vimrc ou charger un fichier de retrait personnalisée manuellement.

modifier. Il semble plus compliqué que ce que je pensais, mais peut-être il y a quelque chose spécifiquement défini dans le fichier que vous indenter besoin de fixer

2ème édition: On dirait que je me trompais complètement, Check out:

Restauration tiret après avoir tapé de hachage

ou

howto -configure-vim-à-pas-mis-commentaires-à-la-début-de-lignes-en-édition

Autres conseils

Eh bien, après avoir exploré quelques options, y compris en utilisant « :set cindent » au lieu de « :set smartindent », j'ai fini par revenir juste en utilisant « :set autoindent ». Il y a probablement des façons de rendre ce travail de choses exactement comme je le veux, mais il est assez désordonné et assez fiddly que je ne peux pas être dérangé. Je travaille très bien avec autoindent pour les années impaires 20 précédents, et les avantages des cloches et de sifflets supplémentaires fournies par smartindent sont compensés par les ce que je considère comme mauvaise conduite.

Merci, Juan, pour votre aide. Croyez-le ou non, il a aidé -. Beaucoup

J'ai aussi découvert quelques autres commandes nettes, cependant, tout en suivant sur ce point:

>i}
>a}

Ces décalage vers la droite le bloc de code que vous êtes. La version « i » indentations le corps et non pas les accolades de fermeture (mon style préféré), et la version « a » indentations les accolades de fermeture à (la version qui est nécessaire au travail).

, vous pouvez également appliquer des qualificatifs à « % » dans les commandes exécutées au shell:

:make %:r.o

Cela irait à faire sur la « racine » du nom de fichier actuel (qui est « %:r ») suivi de « .o ». Ou, autrement dit, si je suis d'édition somefile.c, cette exécute make somefile.o.

Ajoutez la ligne ci-dessous dans votre .vimrc

filetype indent sur

(il régler le mode de retrait à droite en fonction du type de fichier)

J'ai eu ce même problème depuis longtemps, jusqu'à ce que je compris que autoindent et smartindent sont à la fois inutiles si « filetype indent » est activé dans votre vimrc - « filetype indent sur » utilise le tiret / sh.vim (ou quoi que langue) fichier dans votre répertoire vim pour comprendre les règles d'indentation et autoindent et smartindent les deux peuvent interférer avec.

Je n'ai pas testé avec sh, mais perl soudainement commencé à se comporter correctement quand je suis passé.

Sidenote: la redirection de Juan, « tiret Restauration après avoir tapé hachage », n'est pas une bonne solution - alors qu'il ne corrige le problème dans une situation (en tapant le code dans), il ne change pas comment l'éditeur pense que ce devrait indentées, donc une réindenter (= de visuels, ou == normal) se fourrer vers la gauche.

J'ai les lignes suivantes dans mon .vimrc et je ne respecte pas le problème.

set smartindent
inoremap # X^H#

J'ai déjà eu set autoindent après ces deux lignes, mais il semble que cela n'a aucun effet.

Oui, c'est très ennuyeux. smartindent est vraiment seulement C comme langues. Voyez comment activer la mise en retrait appropriée en fonction de la langue à: http://www.pixelbeat.org/settings/.vimrc

La réponse précédente suggère:

: inoremap # X ^ H #

est excellent. Il est la réponse proposée par la documentation VIM à « : help smartindent ». Notez que ^ H est entré en utilisant CTRL-V CTRL-H. La section pertinente de la documentation ci-dessous.

    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.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top