53 Stimmen

Schreiben einer Vim-Funktion zum Einfügen eines statischen Textblocks

Ich würde gerne so etwas in vim machen können (Sie können v7+ annehmen, wenn es hilft).

Geben Sie einen Befehl wie diesen (oder einen ähnlichen) ein

:inshtml

und lassen Sie vim folgendes in die aktuelle Datei an der aktuellen Cursorposition ausgeben

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title></title>
    </head>
    <body>
    </body>
</html>

Kann ich eine Vim-Funktion schreiben, die dies tut? Gibt es einen besseren Weg?

4voto

innaM Punkte 46916

Dies sollte möglich sein. Ich benutze automatische Ersetzung. In meiner .vimrc habe ich diese Zeile:

iab _perls #!/usr/bin/perl<CR><BS><CR>use strict;<CR>use warnings;<CR>

Und wann immer ich ein Perl-Skript starte, gebe ich einfach _perls ein und drücke Enter.

4voto

puk Punkte 15462

Sie können Python (oder ein anderes Programm) verwenden, wenn Sie, wie ich, vimScript noch nicht ganz verstanden haben

Dieser Typ spricht über das Vim-Ausdrucksregister. Im Wesentlichen setzen Sie etwas wie dies in Ihr .vimrc Datei

:imap <C-j> <C-r>=system('/home/BennyHill/htmlScript.py')<CR>

So dass Sie jedes Mal, wenn Sie im Einfügemodus die Taste Ctrlj ruft es das Skript htmlScript.py die in etwa Folgendes enthält ( ANMERKUNG Ich habe das nicht wirklich getestet)

#!/usr/bin/env python
import sys

snippet="""<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title></title>
    </head>
    <body>
    </body>
</html>"""

sys.stdout.write(snippet)

Vergessen Sie dann nicht, die Datei ausführbar zu machen ( chmod 0755 /home/BennyHill/htmlScript.py ). Es mag übertrieben sein, aber ich kenne mich mit Python viel besser aus als mit der Syntax von vim.

1voto

Mykola Golubyev Punkte 54937

Sie können diesen Text einmal in ein Register (z. B. 'a') kopieren. Und fügen Sie ihn jedes Mal ein, wenn Sie ihn brauchen, es sei denn, Sie überschreiben das Register 'a'.

Zum Kopieren, um ein im visuellen Modus zu registrieren: "ay
Einfügen aus Register a im normalen Modus: "ap
Einfügen aus Register a im Einfügemodus: a

Wenn Sie diese Vorlage bereits kopiert haben, können Sie auch

let @a = @*

Um diese Vorlage zu registrieren, müssen Sie eine.

1voto

Luc Hermitte Punkte 30868

Es gibt viele Template-Expander-Plugins für vim.

NB: Ich pflege die Abspaltung von muTemplate . Geben Sie Ihren Code einfach in {rtp}/template/html.template oder in $VIMTEMPLATES/html.template . Und das war's auch schon. Wenn Sie nicht möchten, dass das Snippet beim Öffnen einer neuen HTML-Datei implizit geladen wird, dann benennen Sie die Vorlagendatei html/whatever.template (anstelle von html.template ), und laden Sie es mit :MuTemplate html/whatever von mit whatever^r<tab> im INSERT-Modus (in einem HTML-Puffer).

Alle Probleme mit dem Pfad, der Übertragbarkeit usw. sind bereits gelöst. Und im Gegensatz zu snippetEmu, das mehrere (und irgendwie erwartete) ( schwer zu pflegen , IMO) Snippets in einer Snippets-Definitionsdatei, benötigt Mu-template eine Vorlagendatei pro Snippet.

0voto

alhelal Punkte 826

Legen Sie Ihren Text in einer Datei ab (z.B., html ). Geben Sie dann Folgendes in Ihr .vimrc .
command Inshtml r html

Ich benutze Inshtml anstelle von inshtml weil vim keine benutzerdefinierten Befehle unterstützt, die mit einem Kleinbuchstaben beginnen.

Dann können Sie Folgendes eingeben Inshtml im Befehlsmodus (d. h., :Inshtml ).

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