3 Stimmen

Vim-Befehle programmatisch ausführen?

Ich bin daran interessiert, eine TDD-Umgebung für die Entwicklung von Vim-Skripten und rc-Dateien einzurichten. Als einfaches Beispiel, sagen wir, ich möchte, dass Vim 8 Leerzeichen einfügt, wenn ich die Tabulator-Taste drücke. Ich würde ein Skript einrichten, das das Folgende tut:

  • Starten Sie vim mit einer sandboxed .vimrc-Datei
  • drücken Sie i
  • Registerkarte drücken
  • esc drücken
  • drücken :w test_out
  • behaupten, dass test_out ' ' enthält

durch die Standardkonfiguration in vim, würde dies fehlschlagen. Sobald ich jedoch hinzufüge set expandtab zu meiner .vimrc-Datei hinzufügen, wird der Test erfolgreich sein.

Wie kann ich diese Befehle programmatisch eingeben? vim -c <commands> ist nahe dran, scheint aber nur bei Befehlen im Ex-Modus zu funktionieren. Irgendwelche Vorschläge? Diese Frage scheint gründlich google-sicher zu sein.

5voto

Miguel Ventura Punkte 9926

Sie können versuchen vim -S <script in> und, der Einfachheit halber, das Gegenteil vim -w <script out> .

Weitere Einzelheiten zu diesen Optionen finden Sie in der VIM-Dokumentation für die -s y -w Argumente.

1voto

msw Punkte 41469

Ist die Verwendung von vim eine Voraussetzung? Wenn nicht, verwenden Sie das falsche Werkzeug für diese Aufgabe, sed ist vielleicht besser geeignet.

Aber wenn es sein muss, können Sie es auch mit vim machen, rufen Sie es einfach auf ex

#!/bin/sh
# insert a tab as the first character of test_out
ex test_out <<EOF
s/^/^I/
wq
EOF

if [ `od -c test_out | awk 'NR == 1 {print $2}'` != '\t' ] ; then
    echo "assertion failed"; exit 1;
fi

Wo ^I ist eigentlich ein Tab . Dies ist allerdings ein sehr merkwürdiger Ansatz.

0 Stimmen

Ja, die Idee ist, TDD auf Vim-Plugins und dergleichen zu tun. Ich nehme an, ich könnte TDD auf einem externen Shell-Skript machen und es dann von mit in Vim abbilden, aber das ist nicht ganz das, was ich will. Hauptsächlich bin ich daran interessiert, besser zu verstehen, was ich aus den .vimrc-Dateien und Plugin-Verzeichnissen anderer Leute entnehme.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X