Wie wendet man in vim automatische Befehle für einen Dateityp auf einen Bereich einer Datei an?

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

  •  02-01-2020
  •  | 
  •  

Frage

Ich habe eine Art polyglotten Dateityp, in den C, Python, Ruby usw. eingebettet sein können (denken Sie an „Wiki-Seite“, wenn es hilft).Gibt es eine Möglichkeit, die automatischen Befehle für einen bekannten Dateityp in einem Bereich der Datei auszuführen?

Zum Beispiel könnte ich Folgendes haben:

#!bash
if [ a = b ]; then
   echo 'equal'
fi

#!python
if a = b:
    print('equal')

Und ich möchte Bash-Dateityp-Autobefehle auf den ersten Teil und Python-Dateityp-Autobefehle auf den zweiten Teil anwenden.

Ich kann nur eine Syntaxhervorhebung erreichen, indem ich eine Region mit definiere Das Methode, aber ich verstehe Autobefehle nicht genug, um sie auf ähnliche Weise anwenden zu können.

War es hilfreich?

Lösung

Dies automatisch durchzuführen ist eine Herausforderung, da die Dateitypeinstellungen pufferlokal sind;Vim hat also keine Vorstellung von Regionen :autocmds verwendet werden müssen, wie Sie richtig angegeben haben.

Schnell und einfach

Mit einem Plugin wie NrrwRgn – Ein Narrow-Region-Plugin ähnlich wie Emacs, können Sie Regionen klonen, um Arbeitspuffer zu trennen;Das Plugin synchronisiert sie beim Schreiben automatisch wieder.Jedem Puffer kann über ein separater Dateityp zugewiesen werden :setf.

Ein noch einfacherer Ansatz besteht darin, einige Zuordnungen zu definieren, um den Dateityp schnell zu wechseln:

:nnoremap <Leader>fp :setf python<CR>
:nnoremap <Leader>fs :setf sh<CR>

Wirklich getrennte Regionen in einem einzigen Puffer

Die Skizze dazu ist einfach:

:autocmd CursorMoved,CursorMovedI <buffer> if line('.') >= 6 | setf python | else | setf sh | endif

Dies setzt voraus, dass jedes Dateityp-Plugin eine ordnungsgemäße Bereinigung durchführt (oder alle relevanten Optionen überschreibt).

So bestimmen Sie die Regionen

Sie möchten die Zeilennummern auf keinen Fall explizit angeben wie in der Skizze oben.Mein OnSyntaxChange-Plugin könnte hilfreich sein, falls Sie für jeden Block die richtigen Syntaxbereiche haben/definieren können.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top