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?

44voto

Dan Andreatta Punkte 3461

Ich komme zu spät, aber eine andere Möglichkeit besteht darin, einen Befehl zu erstellen, z. B.

:command Inshtml :normal i your text here^V<ESC>

Sie können es aufrufen als

:Inshtml

Erklärung: der Befehl läuft im Kommandomodus, und Sie wechseln in den normalen Modus mit :normal, dann in den Einfügemodus mit 'i', was auf das 'i' folgt, ist Ihr Text, und Sie beenden mit Escape, das als Zeichen durch Eingabe von ^V eingegeben wird

Es ist auch möglich, Argumente hinzuzufügen, z. B.

:command -nargs=1 Inshtml :normal i You entered <args>^V<ESC>

donde <args> (wörtlich eingegeben) wird durch die tatsächlichen Argumente ersetzt, und Sie rufen es mit

:Inshtml blah

41voto

Paolo Tedesco Punkte 52228

Ich mache das, indem ich unter meinem Vim-Ordner eine Reihe von Dateien aufbewahre, die ich dann mit der Option r Befehl (der den Inhalt einer Datei an der aktuellen Stelle einfügt, wenn keine Zeilennummer übergeben wird) aus einer Funktion heraus:

function! Class()
    " ~/vim/cpp/new-class.txt is the path to the template file
    r~/vim/cpp/new-class.txt
endfunction

Dies ist meiner Meinung nach sehr praktisch, wenn Sie mehrzeiligen Text einfügen möchten. Dann können Sie z. B. eine Tastenkombination zuweisen, um Ihre Funktion aufzurufen:

nmap ^N :call Class()<CR>

16voto

uromay Punkte 319

Ich habe eine neue Datei erstellt generate_html.vim in ~/.vim/plugins/ mit folgendem Code

"
" <This plugin generates html tags to new html files>
"

autocmd BufNewFile  *.html  call    Generate_html()

function! Generate_html()
    call append(0, "<!DOCTYPE HTML>")
    call append(1, "<html><head>")
    call append(2, "    <title></title>")
    call append(3, '    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />')
    call append(4, '    <style type="text/css">')
    call append(5, '    </style>')
    call append(6, '</head>')
    call append(7, '<body>')
    call append(8, '</body>')
    call append(9, '</html>')
endfunction

Auf diese Weise wird jedes Mal, wenn ich eine neue .html-Datei in Vim öffne, dieser Text in die neue Datei gedruckt

8voto

Brian Agnew Punkte 260470

Können Sie eine Abkürzung definieren, z.B.

:ab insh 'your html here'

da nichts in der obigen Tabelle parametrisiert zu sein scheint?

Wenn ich mir meine VIM-Konfigurationen ansehe, stelle ich fest, dass eine neue .html-Datei geladen wird:

autocmd BufNewFile *.html call GenerateHeader()

und definieren eine Funktion GenerateHeader() um die gewünschte Vorlage einzufügen (dasselbe tue ich für Java/Perl usw.).

Es lohnt sich, die Vim-Kochbuch für diese Art von Dingen. Es ist eine gute Investition.

8voto

f3lix Punkte 28602

SchnipselEmu

Ich benutze gerne die SchnipselEmu vim-Plugin zum Einfügen von Codeschnipseln wie Ihrem.

Der Vorteil von snippetsEmu ist, dass Sie Platzhalter angeben und direkt zu ihnen springen können, um einen Wert einzufügen. In Ihrem Fall könnten Sie zum Beispiel einen Platzhalter zwischen den Titel Tags, so dass Sie dem Dokument beim Einfügen dieses Schnipsels problemlos einen Titel hinzufügen können.

SnippetsEmu wird mit verschiedenen Snippets (auch für HTML) ausgeliefert, und es können täglich neue Snippets hinzugefügt werden.


EDITAR

snipMate

Heute habe ich meine VIM-Konfiugration und die installierten Plugins erneut überprüft und festgestellt, dass die snipMate Plugin die IMHO sogar besser ist als snippetsEmu . snipMate aktualisiert genau wie TextMate alle Platzhalter im laufenden Betrieb.

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