Der Text-Editor vim bietet viele Möglichkeiten für Automatismen. Im folgenden Artikel wird das automatische Einfügen von Textbausteinen vorgestellt. Sehr häufig schreibt man beim Programmieren oder beim Administrieren immer wieder die gleichen Code-Teile. Dabei kann der Editor vim schon beim Anlegen von Dateien erkennen, um was für einen Datei-Typ es sich handelt, und entsprechende Textbausteine bereit stellen. Dies kann durch die Datei .vim/plugin/autoinsert.vim realisiert werden, die zum Beispiel wie folgt aussieht:
if has("autocmd") augroup autoinsert au! autocmd BufNewFile *.c call s:Template("c") autocmd BufNewFile Makefile call s:Template("make") autocmd BufNewFile makefile call s:Template("make-simple") augroup END endif function s:Template(argument) if (a:argument == "help") echo "Currently availible templates:" echo " c - Plain C Template" echo " make - Makefile Template" echo " make-simple - Simple Variant of the Makefile Template" else " First delete all in the current buffer %d " The Makefile variants if (a:argument == "make") 0r ~/.vim/skeletons/template.make set ft=make elseif (a:argument == "make-simple") 0r ~/.vim/skeletons/template.make_simple set ft=make elseif (a:argument == "make-simple-cpp") 0r ~/.vim/skeletons/template.make_simple_cpp set ft=make " Stuff for plain C elseif (a:argument == "c") 0r ~/.vim/skeletons/template.c set ft=c endif silent %!~/.vim/do_header % endif endfunction command! -nargs=1 Template call s:Template(<f-args>)
Wie zu sehen ist, werden in den Zeilen 21-35 diverse Templates aufgerufen, die wiederum die Textbausteine beinhalten. Das Template für make_simple, ~/.vim/skeletons/template.make_simple fügt zum Beispiel die üblichen Compiler-Flags zum Bauen von C/C++-Programmen mit dem gcc ein:
CC := gcc CFLAGS := -Wall -pedantic -O3 LDFLAGS := PROG := main OBJS := main.o all: $(PROG) $(PROG): $(OBJS) $(CC) $(LDFLAGS) -o $@ $^ clean: rm -rf $(PROG) $(OBJS) .PHONY: all clean
Das folgende Template ~/.vim/skeletons/template.c mit Textbausteinen für Dateien mit der Endung .c fügt neben dem obligatorischen GPL-Header auch ein C-Code-Gerüst ein:
/* * %%FILENAME%% - description * * Copyright (C) %%YEAR%% %%AUTHOR%% * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. */ #include <stdio.h> int main (int argc, char **argv) { return 0; } /**This must remain at the end of the file.********** * vim600:set sw=2 ts=8 fdm=marker fmr=«««,»»»: * * vim600:set cindent cinoptions={1s,>2s,^-1s,n-1s: * ****************************************************/
Die im Code vorkommenden Variablen wie %%FILENAME%% oder auch %%AUTHOR%% können ebenfalls automatisch beim Aufruf durch ein kleines Shell-Skript ersetzt werden: das Skript ~/.vim/do_header, aufgerufen mit dem Dateinamen als Übergabewert, ermittelt über die glibc-Funktion getent bzw. aus der /etc/passwd den Namen des Autors und setzt diesen ein. Auch andere Variablen werden mit üblichen GNU-Tools ermittelt, wie das folgende Listing zeigt:
#!/usr/bin/env zsh if which getent > /dev/null; then REALNAME=$(getent passwd $USER|awk -F : '{print $5}' | awk -F , '{print $1}') else REALNAME=$(grep $USER /etc/passwd|awk -F : '{print $5}' | awk -F , '{print $1}') if which nidump > /dev/null && [ -z "$REALNAME" ]; then REALNAME=$(nidump passwd / | grep $USER|awk -F : '{print $8}') fi fi DATE=$(date) YEAR=$(date +%Y) FILENAME=$(echo $1 | sed 's/[^/]*\///') FILE=$(echo $FILENAME | sed 's/\..*//') FILEBIG=$(echo $FILE | tr '[:lower:]' '[:upper:]') sed "s/%%AUTHOR%%/$REALNAME/g; s/%%DATE%%/$DATE/g; s/%%YEAR%%/$YEAR/g; s/%%FILENAME%%/$FILENAME/g; s/%%FILE%%/$FILE/g; s/%%FILEBIG%%/$FILEBIG/g;"
Neben den hier gezeigten Beispielen können auch Templates für andere Programmiersprachen oder generell Datei-Typen erstellt werden, die Möglichkeiten sind fast endlos. Dieses Howto zeigt nur eine kleine Auswahl der möglichen Automatismen des Editors vim, welche die tägliche Arbeit eines Admins erheblich erleichtern. Alle weiteren Howtos dieses Blogs werden als Kategorie Howtos samt eigenem Feed angeboten – falls ihr tiefer gehende Support- oder Service-Leistungen für GNU-Tools oder Linux allgemein sucht, seit ihr bei uns ebenfalls richtig.
Dieser Artikel wurde ursprünglich geschrieben von Martin Zobel-Helas.
Kategorien: | HowTos |
---|---|
Tags: | Vim |
über den Autor
Technischer Leiter Betrieb
zur Person
Als einer der technischen Leiter unterstützt Martin Zobel-Helas unsere Kunden bei der Konzeption und Integration von Open Source Software in komplexen IT-Infrastrukturen. Martin arbeitet schon seit 2005 bei credativ und übernimmt dort ebenfalls die Rolle des Open Source-Beauftragten. Gleichzeitig ist er ein sehr bekanntes und geschätztes Mitglied der internationalen Debian Community. Seine langjährige Mitarbeit als Entwickler und Sysadmin des Debian-Projektes zeichnen Ihn genauso aus, wie seine Tätigkeit im Vorstand der gemeinnützigen Open Source Organisation „Software in the Public Interest, Inc.“.