Welche Einstellung in vim entgegenwirkt smartindent Weigerung einrücken # Kommentare in Shell-Skripten?

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

  •  23-08-2019
  •  | 
  •  

Frage

ich mit Vim 7 (vorher vim 6) und die smartindent Einstellung vor kurzem begonnen. Zum größten Teil, es funktioniert gut, obwohl ich so gewohnt bin eine Lasche nach einer offenen Klammer zu tippen, dass es fast kontraproduktiv ist.

Allerdings gibt es ein Stück manischen Verhalten. Wenn ein Shell-Skript bearbeiten, ich versuche, einen Kommentar an der aktuellen Einzugsebene zu schaffen, aber smartindent wird damit nichts zu tun haben. Es besteht darauf, dass der Kommentar in einer Ebene liegt 0 (kein Gedankenstrich). Was noch schlimmer ist, es bricht Shift-rechts ( ‚>>‘ und Freunde), so dass sie nicht funktionieren. Das ist geradezu Insubordination, und ich würde gerne wissen, was der beste Weg, um es zu beheben?

(ich bin auch nicht so scharf auf smartindent Ideen über Einrücken then nach if.)

Bevorzugte Lösungen werden mich Handbuch bashing speichern - ich bin faul. Eine Option wäre ‚deaktivieren smartindent wenn Shell-Skripten Bearbeitung (lassen Sie es für den Rest auf)‘. Eine weitere Möglichkeit wäre, Richtlinien, wie das Kontrollskript für smartindent zu finden und was zu bearbeiten, um die Eigenschaften zu ändern, die ich nicht mag. Die letzte Option (die ich nicht brauche Ratschläge, wie zu tun - nur den Hinweis, dass es das Beste ist, oder nur, Art und Weise geistige Gesundheit wieder herzustellen). Ist smartindent ungesetzt verlassen

sah ich die vage damit verbundene Frage auf " (PHP und) ärgerlich vim unindent Regeln " ; es mich nicht mit der direkten Antwort geben, wenn auch vielleicht die cindent und damit verbundene dort genannten Elemente in der Tat ein Teil der Antwort sind.

War es hilfreich?

Lösung

Hier finden Sie die indent-Datei (zum Beispiel /usr/share/vim/vim71/indent/sh.vim auf meinem System)

Diese Zeile sieht aus wie das Problem:

setlocal indentkeys-=:,0#

Vielleicht können Sie dieses Problem beheben in Ihrem .vimrc oder eine benutzerdefinierte indent Datei manuell geladen werden.

bearbeiten. Es sieht komplizierter aus, als ich dachte, aber vielleicht gibt es etwas, speziell in der Einrücken-Datei festgelegt, die Sie müßten beheben

2. edit: Sieht aus wie ich völlig falsch war, Check out:

Wiederherstellen Spiegelstrich nach Hash eingeben

oder

Howto -configure-vim-zu-nicht-put-Kommentare-at-the-beginning-of-Linien-while-Bearbeitung

Andere Tipps

Nun, nachdem einige Optionen zu erkunden, einschließlich der Verwendung von ‚:set cindent‘ anstelle von ‚:set smartindent‘, habe ich zurückkehrt am Ende nur noch mit ‚:set autoindent‘. Es gibt wahrscheinlich Möglichkeiten, diese Sachen Arbeit genau zu machen, wie ich es will, aber es ist etwas chaotisch genug und knifflig genug, dass ich nicht gestört werden kann. Ich habe mit autoindent für die vorherigen 20-ungeraden Jahre gut funktioniert und die Vorteile aus dem zusätzlichen Schnickschnack von smartindent vorgesehen sind überwiegen durch dem, was ich als schlechtes Benehmen betrachten.

Danke, Juan, für Ihre Unterstützung. Ob Sie es glauben oder nicht, es hat geholfen -. Sehr viel

Ich entdeckte auch ein paar andere nette Befehle, obwohl, während auf das Follow-up:

>i}
>a}

Diese Verschiebung nach rechts um den Block von Code, den Sie in sind. Die ‚i‘ -Version Einzüge die Körper und nicht die Schluss Klammern (meine bevorzugte Art), und die ‚a‘ -Version Einzüge der Schließ Klammern (die Version, die ist erforderlich bei der Arbeit).

Sie können aber auch an der Shell ausgeführt Qualifier ‚%‘ in Befehle gelten:

:make %:r.o

Dies liefe auf dem ‚root‘ macht aus dem aktuellen Dateinamen (das ‚%:r‘), gefolgt von ‚.o‘. Oder in anderen Worten, wenn ich somefile.c bin die Bearbeitung, dies führt make somefile.o.

Fügen Sie die folgende Zeile in Ihrem .vimrc

Datei des Typs Einzug auf

(es wird den rechten Einzug Modus je nach Dateityp festgelegt)

Ich hatte das gleiche Problem für eine lange Zeit, bis ich erkannte, dass autoindent und smartindent sind beide nicht erforderlich, wenn „Dateityp Einzug auf“ in Ihrem vimrc gesetzt - ‚Dateityp Einzug auf‘ nutzt den Einzug / sh.vim (oder was auch immer Sprache) in Ihrem vim Verzeichnis-Datei der Vertiefung Regeln und autoindent, um herauszufinden, und smartindent beide mit ihm stören können.

Ich habe das nicht mit sh getestet, aber Perl begann plötzlich benimmt richtig, wenn ich umgeschaltet wird.

Nebenbei bemerkt: Juans Redirect „indent Wiederherstellen nach Hash-Eingabe“, ist keine gute Lösung - während sie das Problem in einer Situation nicht korrigiert (die Eingabe einer Code in), es ändert sich nicht, wie der Editor denkt, dass es sollte eingerückt werden, so dass ein erneuter Einzug (visuell = oder normale ==) wird es nach links schieben zurück.

Ich habe die folgenden Zeilen in meinem .vimrc und ich beobachte das Problem nicht.

set smartindent
inoremap # X^H#

Früher musste ich set autoindent nach diesen beiden Linien, aber es scheint, dass es keine Wirkung.

Ja, das ist sehr ärgerlich. smartindent ist wirklich nur für C wie Sprachen. Sehen Sie, wie ich das entsprechende Einrücken ermöglichen, basierend auf Sprache an: http://www.pixelbeat.org/settings/.vimrc

Die vorherige Antwort darauf hindeutet:

: inoremap # X ^ H #

ist ausgezeichnet. Es ist die Antwort von der VIM-Dokumentation vorgeschlagen bei „: help smartindent“. Man beachte, daß H ^ eingegeben wird unter Verwendung von CTRL-V CTRL-H. Der entsprechende Abschnitt der Dokumentation finden Sie unten.

    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.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top