Es gibt eine Vielzahl von Fragen, in denen über gängige Tricks gesprochen wird, insbesondere " Vim + ctags tips and tricks ".
Ich beziehe mich jedoch nicht auf häufig verwendete Verknüpfungen, die ein Vim-Neuling cool finden würde. Ich spreche von einem erfahrenen Unix-Benutzer (Entwickler, Administrator usw.), der denkt, er weiß etwas, von dem 99% von uns noch nie etwas gehört oder geträumt haben. Etwas, das nicht nur ihre Arbeit erleichtert, sondern auch COOL und hackisch ist. Schließlich befindet sich Vim in dem Betriebssystem mit den meisten dunklen Ecken der Welt, daher sollte es Feinheiten aufweisen, die nur wenige Privilegierte kennen und mit uns teilen möchten.
Könnte nicht einer sein, von dem 99% der Vim-Benutzer nichts wissen, aber ich verwende ihn täglich und das muss jeder Linux + Vim-Poweruser wissen.
Grundlegender Befehl, aber äußerst nützlich.
:w !Sudo tee %
Ich vergesse oft, Sudo zu verwenden, bevor ich eine Datei bearbeite, für die ich keine Schreibrechte habe. Wenn ich zum Speichern dieser Datei komme und einen Berechtigungsfehler erhalte, gebe ich einfach den Befehl vim aus, um die Datei zu speichern, ohne sie in einer temporären Datei speichern und dann erneut kopieren zu müssen.
Sie müssen offensichtlich auf einem System mit Sudo installiert sein und über Sudo-Rechte verfügen.
Etwas, das ich kürzlich entdeckt habe und das ich sehr cool fand:
:earlier 15m
Setzt das Dokument auf den Stand von vor 15 Minuten zurück. Kann verschiedene Argumente für die Zeitspanne annehmen, für die Sie ein Rollback durchführen möchten, und ist abhängig von Undolevels. Kann mit dem entgegengesetzten Befehl :later
Rückgängig gemacht werden
:! [command]
führt einen externen Befehl aus, während Sie sich in Vim befinden.
Aber füge einen Punkt nach dem Doppelpunkt hinzu, :.! [command]
, und die Ausgabe des Befehls wird in Ihr aktuelles Fenster geschrieben. Das ist : . !
Zum Beispiel:
:.! ls
Ich verwende dies häufig, um beispielsweise das aktuelle Datum in ein Dokument einzufügen, das ich schreibe:
:.! date
Nicht gerade unklar, aber es gibt mehrere "Löschen in" -Befehle, die äußerst nützlich sind, wie z.
diw
, um das aktuelle Wort zu löschendi(
zum Löschen innerhalb der aktuellen Parensdi"
, um den Text zwischen den Anführungszeichen zu löschenAndere finden Sie auf :help text-objects
de Löschen Sie alles bis zum Ende des Wortes durch Drücken von. nach Herzenslust.
ci (xyz [Esc] - Dies ist ein seltsamer Wert. Hier bedeutet das 'i' nicht den Einfügemodus. Stattdessen bedeutet es in der Klammer. es funktioniert auch in eckigen und figuralen Klammern - mache einfach ci [oder ci {entsprechend. Natürlich kannst du di (wenn du nur den ganzen Text löschen willst, ohne etwas einzugeben) Sie können auch a
anstelle von i
ausführen, wenn Sie auch die Klammern und nicht nur den Text darin löschen möchten.
ci " - schneidet den Text in aktuelle Anführungszeichen
ciw - schneidet das aktuelle Wort ab. Dies funktioniert genauso wie das vorherige, außer dass (
wird durch w
ersetzt.
C - Rest der Zeile abschneiden und in den Einfügemodus wechseln.
ZZ - Aktuelle Datei speichern und schließen (schneller als Strg-F4, um die aktuelle Registerkarte zu schließen!)
ddp - Verschiebt die aktuelle Zeile eine Zeile nach unten
xp - Verschiebt das aktuelle Zeichen um eine Position nach rechts
U - Großbuchstaben, also setzt viwU
das Wort hoch
~ - wechselt zwischen Groß- und Kleinschreibung, also viw~
kehrt die Groß- und Kleinschreibung von Word um
Strg + u/Strg + d blättern Sie die Seite um einen halben Bildschirm nach oben oder unten. Dies scheint nützlicher zu sein als das übliche Paging im Vollbildmodus, da es einfacher ist, die Beziehung zwischen den beiden Bildschirmen zu erkennen. Für diejenigen, die immer noch den gesamten Bildschirm gleichzeitig scrollen möchten, gibt es Strg + f für Vorwärts und Strg + b für Rückwärts. Strg + Y und Strg + E rollen jeweils eine Zeile nach unten oder oben.
Verrückter, aber sehr nützlicher Befehl ist zz - Scrollt den Bildschirm, damit diese Zeile in der Mitte erscheint. Dies ist hervorragend geeignet, um den Code, an dem Sie arbeiten, in den Mittelpunkt Ihrer Aufmerksamkeit zu rücken. Geschwister-Befehle - zt und zb - machen diese Zeile zur obersten oder untersten auf dem Bildschirm, was nicht ganz so nützlich ist.
% findet die passende Klammer und springt dorthin.
de - vom Cursor bis zum Ende des Wortes löschen (Sie können auch dE
tun, um bis zum nächsten Leerzeichen zu löschen)
bde - Löscht das aktuelle Wort von links nach rechts
df [Leerzeichen] - lösche bis einschließlich des nächsten Leerzeichens
dt. - bis zum nächsten Punkt löschen
dd - lösche diese ganze Zeile
ye (oder yE) - zieht den Text von hier bis zum Ende des Wortes
ce - schneidet das Ende des Wortes durch
bye - kopiert das aktuelle Wort (ich frage mich, was "hi" macht!)
yy - kopiert die aktuelle Zeile
cc - schneidet die aktuelle Zeile ab, Sie können stattdessen auch S
ausführen. Es gibt auch eine untere Begrenzung s
, die das aktuelle Zeichen schneidet und in den Einfügemodus wechselt.
viwy oder viwc. Ruckeln oder aktuelles Wort ändern. Drücken Sie mehrmals auf w
, um jedes nachfolgende Wort auszuwählen, und verwenden Sie b
, um rückwärts zu springen
vi { - wähle den gesamten Text in Klammern aus. va {- wähle den gesamten Text einschließlich {} s aus
vi (p - hebe alles in den () hervor und ersetze es durch den eingefügten Text
b und e bewegen den Cursor Wort für Wort, ähnlich wie es Strg + Pfeile normalerweise tun. Die Definition von Word ist jedoch etwas anders, da mehrere aufeinanderfolgende Delmiter als ein Wort behandelt werden. Wenn Sie in der Mitte eines Wortes beginnen, gelangen Sie durch Drücken von b immer zum Anfang des aktuellen Wortes, und jedes aufeinanderfolgende b springt zum Anfang des nächsten Wortes. Ähnlich und leicht zu merken, bringt e
den Cursor an das Ende des aktuellen und jedes weiteren Wortes.
Ähnlich wie bei b
/e
, groß B
und E
bewegen Sie den Cursor Wort für Wort, wobei Sie nur Leerzeichen als Begrenzer verwenden. =
Großbuchstabe D (tief durchatmen) Löscht den Rest der Zeile rechts vom Cursor, genau wie bei Umschalt + Ende/Entf in normalen Editoren (beachten Sie stattdessen 2 Tastendrücke - Umschalt + D - von 3)
Eine, die ich selten in den meisten Vim-Tutorials finde, die aber (zumindest für mich) UNGLAUBLICH nützlich ist, ist die
g; and g,
(vorwärts, rückwärts) durch die Änderungsliste bewegen.
Lassen Sie mich zeigen, wie ich es benutze. Manchmal muss ich einen Code oder eine Zeichenfolge kopieren und einfügen, z. B. einen hexadezimalen Farbcode in eine CSS-Datei, also suche ich, springe (egal wo die Übereinstimmung ist), kopiere sie und springe dann zurück (g;) zu wo Ich habe den Code bearbeitet, um ihn endlich einzufügen. Keine Notwendigkeit, Marken zu erstellen. Einfacher.
Nur meine 2 Cent.
:%!xxd
Mach aus vim einen Hex-Editor.
:%!xxd -r
Zurückkehren.
Warnung: Wenn Sie nicht mit Binär (-b) bearbeiten, können Sie die Datei beschädigen. - Josh Lee in den Kommentaren.
gv
Wählt die letzte visuelle Auswahl erneut aus.
Manchmal wird eine Einstellung in Ihrem .vimrc durch ein Plugin oder einen automatischen Befehl überschrieben. Ein nützlicher Trick zum Debuggen ist die Verwendung des Befehls: verbose in Verbindung mit: set. Um zum Beispiel herauszufinden, wo cindent gesetzt/nicht gesetzt wurde:
:verbose set cindent?
Dies wird ungefähr so aussehen:
cindent
Last set from /usr/share/vim/vim71/indent/c.vim
Dies funktioniert auch mit Karten und Highlights. (Vielen Dank, joeytwiddle, für den Hinweis.) Zum Beispiel:
:verbose nmap U
n U <C-R>
Last set from ~/.vimrc
:verbose highlight Normal
Normal xxx guifg=#dddddd guibg=#111111 font=Inconsolata Medium 14
Last set from ~/src/vim-holodark/colors/holodark.vim
:%TOhtml
Erstellt ein HTML-Rendering der aktuellen Datei.
Ich bin mir nicht sicher, ob dies überhaupt als düster gilt, aber ich habe es gerade erst gelernt ...
:g/match/y A
zieht (kopiert) alle Zeilen, die "match" enthalten, in das "a
/@a
registrieren. (Die Groß- und Kleinschreibung als A
macht vim append yankings, anstatt den vorherigen Registerinhalt zu ersetzen.) Ich habe es in letzter Zeit häufig beim Erstellen von Internet Explorer-Stylesheets verwendet.
Möchten Sie sich Ihre: Befehlsgeschichte ansehen?
q:
Durchsuchen, bearbeiten und schließlich den Befehl ausführen.
Haben Sie jemals ähnliche Änderungen an zwei Dateien vorgenommen und zwischen diesen hin und her gewechselt? (Sagen wir, Quell- und Header-Dateien?)
:set hidden
:map <TAB> :e#<CR>
Wechseln Sie dann zwischen diesen Dateien hin und her.
Vim öffnet zum Beispiel eine URL
vim http://stackoverflow.com/
Schön, wenn Sie die Quelle einer Seite als Referenz aufrufen müssen.
Makros können andere Makros aufrufen und sich selbst aufrufen.
z.B:
[email protected]@q
... löscht das erste Wort aus jeder Zeile bis zum Ende der Datei.
Dies ist ein recht einfaches Beispiel, aber es zeigt ein sehr mächtiges Merkmal von vim
Vorausgesetzt, Sie haben Perl und/oder Ruby Unterstützung kompiliert in, :rubydo
und :perldo
führt in jeder Zeile eines Bereichs einen Ruby oder Perl-Einzeiler aus (Standardeinstellung ist der gesamte Puffer), mit $_
gebunden an den Text der aktuellen Zeile (abzüglich der neuen Zeile). Manipulieren von $_
ändert den Text dieser Zeile.
Sie können dies verwenden, um bestimmte Dinge zu erledigen, die in einer Skriptsprache einfach zu erledigen sind, mit Vim-Builtins jedoch nicht so offensichtlich sind. So kehren Sie beispielsweise die Reihenfolge der Wörter in einer Zeile um:
:perldo $_ = join ' ', reverse split
So fügen Sie am Ende jeder Zeile eine zufällige Zeichenfolge mit 8 Zeichen (A – Z) ein:
:rubydo $_ += ' ' + (1..8).collect{('A'..'Z').to_a[Rand 26]}.join
Sie können nur jeweils eine Zeile bearbeiten und keine neuen Zeilen hinzufügen.
^ O und ^ I
Gehe zu einer älteren/neueren Position. Wenn Sie sich durch die Datei bewegen (durch Suchen, Verschieben von Befehlen usw.), speichern Sie diese "Sprünge", damit Sie diese Sprünge rückwärts (^ O - O für alt) und vorwärts (^ I - direkt neben I auf der Tastatur wiederholen können ). Ich finde es sehr nützlich, wenn ich Code schreibe und viele Suchvorgänge durchführe.
gi
Gehen Sie zu der Position, an der der Einfügemodus zuletzt gestoppt wurde. Ich sehe mich oft dabei, etwas zu bearbeiten und dann nach etwas zu suchen. Um zum Bearbeitungsort zurückzukehren, drücken Sie gi.
gf
setzen Sie den Cursor auf den Dateinamen (z. B. Header-Datei), drücken Sie gf, und die Datei wird geöffnet
gF
ähnlich wie gf, erkennt jedoch das Format "[Dateiname]: [Zeilennummer]". Durch Drücken von gF wird [Dateiname] geöffnet und der Cursor auf [Zeilennummer] gesetzt.
^ P und ^ N
Text während der Bearbeitung automatisch vervollständigen (^ P - vorherige Übereinstimmung und ^ N nächste Übereinstimmung)
^ X ^ L
Während der Bearbeitung wird dieselbe Zeile bearbeitet (nützlich für die Programmierung). Sie schreiben Code und erinnern sich dann, dass Sie irgendwo in der Datei denselben Code haben. Drücken Sie einfach ^ X ^ L und die gesamte Zeile ist fertig
^ X ^ F
Vollständige Dateinamen. Sie schreiben "/ etc/pass" Hmm. Sie haben den Dateinamen vergessen. Drücken Sie einfach ^ X ^ F und der Dateiname ist fertig
^ Z oder: sh
Temporär in die Shell verschieben. Wenn Sie einen schnellen Schlag brauchen:
Dies ist ein netter Trick, um die aktuelle Datei mit einer anderen Codierung erneut zu öffnen:
:e ++enc=cp1250 %:p
Nützlich, wenn Sie mit älteren Codierungen arbeiten müssen. Die unterstützten Kodierungen sind in einer Tabelle unter encoding-values
Aufgeführt (siehe help
encoding-values
). Ähnliches funktioniert auch für ++ff
, So dass Sie die Datei mit Windows/Unix-Zeilenende erneut öffnen können, wenn Sie zum ersten Mal einen Fehler machen (siehe help
ff
).
" insert range ip's
"
" ( O O )
" =======oOO=(_)==OOo======
:for i in range(1,255) | .put='10.0.0.'.i | endfor
Wenn Sie == eingeben, wird der Einzug der aktuellen Zeile basierend auf der obigen Zeile korrigiert.
Tatsächlich können Sie ein = Vorzeichen gefolgt von einem beliebigen Bewegungsbefehl ausführen. = {Bewegung}
Beispielsweise können Sie die Bewegung% verwenden, die sich zwischen übereinstimmenden Klammern bewegt. Positionieren Sie den Cursor im folgenden Code auf {:
if (thisA == that) {
//not indented
if (some == other) {
x = y;
}
}
Und drücken Sie =%, um dies sofort zu erhalten:
if (thisA == that) {
//not indented
if (some == other) {
x = y;
}
}
Alternativ können Sie = a { innerhalb des Codeblocks ausführen, anstatt sich direkt auf dem {-Zeichen zu positionieren.
imap jj <esc>
Lassen Sie uns sehen, wie ein kleiner Editor IDE Spalten transponiert.
:%s/\(.*\)^I\(.*\)/\2^I\1/
Erläuterung
\(
und \)
ist wie man sich erinnert Sachen im Regex-Land. Und \1
, \2
etc ist das Abrufen der gespeicherten Daten.
>>> \(.*\)^I\(.*\)
Merke dir alles gefolgt von ^I
(tab) gefolgt von allem.
>>> \2^I\1
Ersetzen Sie das obige Material durch "2. Material, an das Sie sich erinnert haben", gefolgt von "1. Material, an das Sie sich erinnert haben" - im Wesentlichen durch eine Transponierung.
Nicht gerade ein dunkles Geheimnis, aber ich möchte die folgende Zuordnung in meine .vimrc-Datei einfügen, damit ich jederzeit auf "-" (Minus) klicken kann, um den Datei-Explorer zu öffnen und Dateien anzuzeigen neben der gerade bearbeiteten). Im Dateiexplorer kann ich ein anderes "-" drücken, um ein Verzeichnis nach oben zu verschieben, wodurch das nahtlose Durchsuchen komplexer Verzeichnisstrukturen ermöglicht wird (wie sie heutzutage von MVC-Frameworks verwendet werden):
map - :Explore<cr>
Diese können auch für jemanden nützlich sein. Ich scrolle gerne durch den Bildschirm und bewege den Cursor gleichzeitig weiter:
map <c-j> j<c-e>
map <c-k> k<c-y>
Registerkartennavigation - Ich liebe Registerkarten und ich muss mich leicht zwischen ihnen bewegen können:
map <c-l> :tabnext<enter>
map <c-h> :tabprevious<enter>
Nur unter Mac OS X: Safari-ähnliche Registerkartennavigation:
map <S-D-Right> :tabnext<cr>
map <S-D-Left> :tabprevious<cr>
Ich benutze gerne 'Sudo bash' und mein Sysadmin hasst das. Er hat 'Sudo' gesperrt, so dass es nur mit wenigen Befehlen (ls, chmod, chown, vi usw.) verwendet werden kann, aber ich konnte vim trotzdem verwenden, um eine Root-Shell zu erhalten:
bash$ Sudo vi +'silent !bash' +q
Password: ******
root#
Oft ändere ich gerne die aktuellen Verzeichnisse während der Bearbeitung - daher muss ich weniger Pfade angeben.
cd %:h
Ich benutze oft viele Fenster, wenn ich an einem Projekt arbeite, und manchmal muss ich die Größe ändern. Folgendes verwende ich:
map + <C-W>+
map - <C-W>-
Diese Zuordnungen ermöglichen das Vergrößern und Verkleinern des aktuellen Fensters. Es ist ganz einfach, aber es ist schnell.
:r! <command>
fügt die Ausgabe eines externen Befehls in den Puffer ein.
Mach ein bisschen Mathe und erhalte das Ergebnis direkt im Text:
:r! echo $((3 + 5 + 8))
Rufen Sie die Liste der zu kompilierenden Dateien ab, wenn Sie ein Makefile schreiben:
:r! ls *.c
Sehen Sie nicht nach, was Sie in Wikipedia gelesen haben, sondern fügen Sie es direkt in das Dokument ein, das Sie gerade schreiben:
:r! lynx -dump http://en.wikipedia.org/wiki/Whatever
Keine obskure Funktion, aber sehr nützlich und zeitsparend.
Wenn Sie eine Sitzung mit Ihren offenen Puffern, Registerkarten, Markierungen und anderen Einstellungen speichern möchten, können Sie Folgendes ausführen:
mksession session.vim
Sie können Ihre Sitzung eröffnen mit:
vim -S session.vim
Ordnen Sie F5 zu, um schnell ROT13 für Ihren Puffer zu erhalten:
map <F5> ggg?G``
Du kannst es als Bossschlüssel benutzen :).
Ich habe diesen heute über NSFAQ gefunden:
Codeblöcke kommentieren.
Aktivieren Sie den blockweisen visuellen Modus, indem Sie STRG-V drücken.
Markieren Sie den Block, den Sie kommentieren möchten.
Drücken Sie I (Großbuchstabe I) und geben Sie Ihre Kommentarzeichenfolge am Anfang der Zeile ein. (// für C++)
Wenn Sie die ESC-Taste drücken, werden alle // ausgewählten Zeilen vor die Zeile gesetzt.
Ich benutze vim für fast jede Textbearbeitung, die ich mache, also benutze ich oft das Kopieren und Einfügen. Das Problem ist, dass vim standardmäßig importierten Text häufig durch Einfügen verzerrt. Der Weg, dies zu stoppen, ist zu verwenden
:set paste
vor dem Einfügen Ihrer Daten. Dies verhindert, dass es kaputt geht.
Beachten Sie, dass Sie :set nopaste
, um die automatische Einrückung wiederherzustellen. Alternative Möglichkeiten zum Einfügen von vorformatiertem Text sind die Zwischenablage-Register (*
und +
), und :r!cat
(Sie müssen das eingefügte Fragment mit ^ D beenden).
Manchmal ist es auch hilfreich, ein kontrastreiches Farbschema zu aktivieren. Dies kann mit erfolgen
:color blue
Mir ist aufgefallen, dass es nicht bei allen von mir verwendeten Versionen von vim funktioniert, aber bei den meisten.
Hier ist etwas nicht offensichtlich. Wenn Ihr $ HOME viele benutzerdefinierte Plugins/Erweiterungen enthält und Sie manchmal von su/Sudo/... aus arbeiten müssen, kann dies hilfreich sein.
In Ihrem ~/.bashrc:
export VIMINIT=":so $HOME/.vimrc"
In Ihrer ~/.vimrc:
if $HOME=='/root'
if $USER=='root'
if isdirectory('/home/your_typical_username')
let rtuser = 'your_typical_username'
elseif isdirectory('/home/your_other_username')
let rtuser = 'your_other_username'
endif
else
let rtuser = $USER
endif
let &runtimepath = substitute(&runtimepath, $HOME, '/home/'.rtuser, 'g')
endif
Dadurch können Ihre lokalen Plugins geladen werden - unabhängig davon, wie Sie den Benutzer ändern.
Vielleicht möchten Sie auch die * .swp-Dateien aus Ihrem aktuellen Pfad in ~/vimtmp ziehen (dies geht in .vimrc):
if ! isdirectory(expand('~/vimtmp'))
call mkdir(expand('~/vimtmp'))
endif
if isdirectory(expand('~/vimtmp'))
set directory=~/vimtmp
else
set directory=.,/var/tmp,/tmp
endif
Einige Zuordnungen, die ich verwende, um die Bearbeitung zu vereinfachen, bewirken, dass Strg + s wie Escape funktionieren und Strg + h/l die Registerkarten wechseln:
inoremap <C-s> <ESC>
vnoremap <C-s> <ESC>
noremap <C-l> gt
noremap <C-h> gT
Strg-n im Einfügemodus vervollständigt automatisch das eingegebene Wort basierend auf allen Wörtern, die sich in offenen Puffern befinden. Wenn es mehr als eine Übereinstimmung gibt, erhalten Sie eine Liste möglicher Wörter, die Sie mit Strg-n und Strg-p durchlaufen können.
gg=G
Korrigiert den Einzug für die gesamte Datei. Ich habe mein vertrauenswürdiges <C-a><C-i>
In Eclipse vermisst, aber ich habe gerade herausgefunden, dass vim gut damit umgeht.
Möglichkeit, Vim auf einem Client/Server-basierten Modus auszuführen.
Angenommen, Sie arbeiten an einem Projekt mit vielen Puffern, Registerkarten und anderen Informationen, die in einer Sitzungsdatei namens session.vim gespeichert sind.
Sie können Ihre Sitzung öffnen und einen Server erstellen, indem Sie den folgenden Befehl eingeben:
vim --servername SAMPLESERVER -S session.vim
Beachten Sie, dass Sie normale Textdateien öffnen können, wenn Sie einen Server erstellen möchten, der nicht unbedingt eine Sitzung sein muss.
Angenommen, Sie befinden sich in einem anderen Terminal und müssen eine andere Datei öffnen. Wenn Sie es regelmäßig öffnen, indem Sie Folgendes ausführen:
vim new_file.txt
Ihre Datei wird in einem separaten Vim-Puffer geöffnet, was für Interaktionen mit den Dateien in Ihrer Sitzung schwierig ist. Verwenden Sie diesen Befehl, um new_file.txt in einem neuen Tab auf Ihrem Server zu öffnen:
vim --servername SAMPLESERVER --remote-tab-silent new_file.txt
Wenn kein Server ausgeführt wird, wird diese Datei wie eine normale Datei geöffnet.
Da es sehr mühsam ist, diese Flags jedes Mal bereitzustellen, wenn Sie sie ausführen möchten, können Sie einen separaten Alias für die Erstellung von Client und Server erstellen.
Ich habe Folgendes in meine bashrc-Datei eingefügt:
alias vims='vim --servername SAMPLESERVER'
alias vimc='vim --servername SAMPLESERVER --remote-tab-silent'
Weitere Informationen hierzu finden Sie unter: http://vimdoc.sourceforge.net/htmldoc/remote.html
Willst du eine IDE?
:make
führt das Makefile im aktuellen Verzeichnis aus, parst die Compiler-Ausgabe, dann kannst du :cn
und :cp
, um die Compiler-Fehler zu durchlaufen, indem Sie jede Datei öffnen und nach der betreffenden Zeilennummer suchen.
:syntax on
aktiviert die Syntaxhervorhebung von vim.
Ich möchte oft einen bestimmten Wort-/Funktionsnamen hervorheben, aber noch nicht zur nächsten Instanz suchen:
map m* *#
Variation von Sudo schreiben:
in .vimrc
cmap w!! w !Sudo tee % >/dev/null
Nach dem Neuladen von vim kannst du "Sudo speichern unter"
:w!!
HOWTO: Automatische Vervollständigung von Ctags bei Verwendung von Vim in Bash. Für alle anderen, die Vim und Ctags verwenden, habe ich eine kleine Auto-Completer-Funktion für Bash geschrieben. Fügen Sie Folgendes in Ihre ~/.bash_completion-Datei ein (erstellen Sie sie, falls sie nicht vorhanden ist):
Vielen Dank an stylishpants für seine zahlreichen Verbesserungen und Verbesserungen.
_vim_ctags() {
local cur prev
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
case "${prev}" in
-t)
# Avoid the complaint message when no tags file exists
if [ ! -r ./tags ]
then
return
fi
# Escape slashes to avoid confusing awk
cur=${cur////\\/}
COMPREPLY=( $(compgen -W "`awk -vORS=" " "/^${cur}/ { print \\$1 }" tags`" ) )
;;
*)
_filedir_xspec
;;
esac
}
# Files matching this pattern are excluded
excludelist='*[email protected](o|O|so|SO|so.!(conf)|SO.!(CONF)|a|A|rpm|RPM|deb|DEB|gif|GIF|jp?(e)g|JP?(E)G|mp3|MP3|mp?(e)g|MP?(E)G|avi|AVI|asf|ASF|ogg|OGG|class|CLASS)'
complete -F _vim_ctags -f -X "${excludelist}" vi vim gvim rvim view rview rgvim rgview gview
Sobald Sie Ihre Bash-Sitzung neu starten (oder eine neue erstellen), können Sie Folgendes eingeben:
Code:
~$ vim -t MyC<tab key>
das Tag wird automatisch vervollständigt, so wie es auch für Dateien und Verzeichnisse geschieht:
Code:
MyClass MyClassFactory
~$ vim -t MyC
Ich finde es sehr nützlich, wenn ich mich auf eine schnelle Fehlerbehebung stürze.
% eignet sich auch, wenn Sie Dateien auf zwei verschiedene Kopien eines Projekts verteilen möchten, ohne die kleinen Finger zu verlieren (vom Stammverzeichnis von project1):
:vert diffs /project2/root/%
: setlocal autoread
Automatisches Neuladen des aktuellen Puffers. Besonders nützlich beim Anzeigen von Protokolldateien. Er bietet fast die Funktionalität eines "Tail" -Programms unter Unix aus vim heraus.
Überprüfung auf Kompilierungsfehler aus vim heraus. setze die makeprg Variable abhängig von der Sprache, die wir für Perl sagen
: setlocal makeprg = Perl\-c \%
Für PHP
setze makeprg = php\-l \%
setze errorformat =% m\in \% f\on\line \% l
Das Ausgeben von ": make" führt das zugehörige makeprg aus und zeigt die Kompilierungsfehler/Warnungen im Quickfix-Fenster an und kann leicht zu den entsprechenden Zeilennummern navigieren.
Ich benutze Vim für alles. Wenn ich eine E-Mail-Nachricht bearbeite, verwende ich:
gqap
(oder gwap
)
umfangreiche, einfache und korrekte absatzweise Neuformatierung, auch mit Anführungszeichen. Um diese Funktionalität zu erreichen, füge ich hinzu:
-c 'set fo=tcrq' -c 'set tw=76'
auf den Befehl, den Editor extern aufzurufen. Ein bemerkenswerter Zusatz wäre, dem Parameter fo (formatoptions) 'a' hinzuzufügen. Dadurch wird der Absatz beim Eingeben und Navigieren im Inhalt automatisch neu formatiert, aber kann stören oder Probleme mit fehlerhaften oder ungewöhnlichen Formatierungen in der Nachricht verursachen.
Ich war mir sicher, dass dies schon jemand gepostet hätte, aber hier ist es.
Nehmen Sie ein beliebiges Build-System, das Sie möchten. machen, mvn, Ameise, was auch immer. Erstellen Sie im Stammverzeichnis des Projektverzeichnisses eine Datei mit den Befehlen, die Sie ständig verwenden:
mVN installieren
mvn sauber installieren
... und so weiter
Um einen Build zu erstellen, setzen Sie den Cursor auf die Zeile und geben Sie !! sh ein. Das heißt filtere diese Zeile; Schreiben Sie es in eine Shell und ersetzen Sie es durch die Ergebnisse.
Das Erstellungsprotokoll ersetzt die Zeile, bereit zum Scrollen, Suchen, was auch immer.
Wenn Sie mit dem Anzeigen des Protokolls fertig sind, geben Sie u ein, um den Vorgang rückgängig zu machen, und Sie kehren zu Ihrer Befehlsdatei zurück.
Aufgrund der Latenz und des Mangels an Farben (Ich liebe Farbschemata :) Ich mag es nicht, auf entfernten Maschinen in PuTTY zu programmieren. Also habe ich diesen Trick entwickelt, um dieses Problem zu umgehen. Ich benutze es unter Windows.
Sie benötigen
Remote-Computer einrichten
Konfigurieren Sie rsync so, dass auf Ihr Arbeitsverzeichnis zugegriffen werden kann. Ich verwende einen SSH-Tunnel und erlaube nur Verbindungen vom Tunnel aus:
address = 127.0.0.1
hosts allow = 127.0.0.1
port = 40000
use chroot = false
[bledge_ce]
path = /home/xplasil/divine/bledge_ce
read only = false
Starten Sie dann rsyncd: rsync --daemon --config = rsyncd.conf
Lokale Maschine einrichten
Installieren Sie rsync von Cygwin. Starten Sie Pageant und laden Sie Ihren privaten Schlüssel für den Remote-Computer. Wenn Sie SSH-Tunelling verwenden, starten Sie PuTTY, um den Tunnel zu erstellen. Erstellen Sie eine Batch-Datei Push.bat in Ihrem Arbeitsverzeichnis, die geänderte Dateien mit rsync auf den Remote-Computer hochlädt:
rsync --blocking-io *.cc *.h SConstruct rsync://localhost:40001/bledge_ce
SConstruct ist eine Build-Datei für Scons. Passen Sie die Liste der Dateien an Ihre Bedürfnisse an. Ersetzen Sie localhost durch den Namen des Remotecomputers, wenn Sie kein SSH-Tunelling verwenden.
Konfigurieren von Vim Das ist jetzt einfach. Wir werden die Quickfix-Funktion (: make and error list) verwenden, die Kompilierung wird jedoch auf dem Remote-Computer ausgeführt. Also müssen wir makeprg setzen:
set makeprg=Push\ &&\ plink\ -batch\ [email protected]\ \"cd\ /home/xplasil/divine/bledge_ce\ &&\ scons\ -j\ 2\"
Dies startet zuerst die Push.bat-Task, um die Dateien hochzuladen und führt dann die Befehle auf dem Remote-Computer mithilfe von SSH ( Plink aus der PuTTY-Suite) aus. Der Befehl wechselt zuerst in das Arbeitsverzeichnis und startet dann den Build (ich verwende scons).
Die Ergebnisse des Builds werden in Ihrer lokalen gVim-Fehlerliste angezeigt.
Geben Sie ein Zeichen aus dem Hexadezimalwert ein (Einfügemodus):
<C-Q>x[type the hexadecimal byte]
Fügen Sie dies in Ihre .vimrc ein, um einen Befehl zum Pretty-Print-XML zu erhalten:
function FormatXml()
%s:\(\S\)\(<[^/]\)\|\(>\)\(</\):\1\3\r\2\4:g
set filetype=xml
normal gg=G
endfunction
command FormatXml :call FormatXml()
=========================================== ============ Im normalen Modus ======================= ================================= gf .......... ...... Datei unter dem Cursor im selben Fenster öffnen -> siehe: h Pfad Strg-w f .......... Datei unter dem Cursor im neuen Fenster öffnen Strg-w q .......... Aktuelles Fenster schließen Strg-w 6 .......... Alternative Datei öffnen -> siehe: h # gi ................ Init-Einfügemodus in der letzten Einfügeposition '0 ................ platzieren der Cursor dort, wo er sich befand, als die Datei zuletzt bearbeitet wurde
set colorcolumn=+1
oder set cc=+1
für vim 7.3
Wenn ich an einem Projekt arbeite, bei dem der Erstellungsprozess langsam ist, erstelle ich immer im Hintergrund und leite die Ausgabe an eine Datei namens errors.err (so etwas wie make debug 2>&1 | tee errors.err
). Dadurch kann ich den Quellcode während des Erstellungsprozesses weiter bearbeiten oder überprüfen. Wenn es fertig ist (mit pynotify in GTK, um mir mitzuteilen, dass es vollständig ist), kann ich das Ergebnis in vim mit quickfix anzeigen. Beginnen Sie mit: cf [ile], das die Fehlerdatei liest und zum ersten Fehler springt. Ich persönlich verwende gerne cwindow, um das Build-Ergebnis in einem separaten Fenster zu erhalten.
:sp %:h
- Verzeichnisliste/Dateiauswahl unter Verwendung des aktuellen Dateiverzeichnisses
(Gehört als Kommentar unter Rampion's cd
Tipp, aber ich habe noch keine Rechte zum Kommentieren)
Kurz vor dem Kopieren und Einfügen in Stackoverflow:
:retab 1
:% s/^I/ /g
:% s/^/ /
Kopieren Sie nun den Code und fügen Sie ihn ein.
Wie in den Kommentaren gefordert:
retab 1. Dadurch wird die Größe der Registerkarte auf eins festgelegt. Es geht aber auch den Code durch und fügt zusätzliche Tabulatoren und Leerzeichen hinzu, so dass die Formatierung keinen der tatsächlichen Texte verschiebt (dh der Text sieht nach ratab gleich aus).
% s/^ I// g: Beachten Sie, dass ^ I das Ergebnis eines Tabulatortreffers ist. Dadurch werden alle Registerkarten gesucht und durch ein einzelnes Leerzeichen ersetzt. Da wir gerade ein Retab gemacht haben, sollte sich die Formatierung nicht ändern, aber da das Einfügen von Tabs in eine Website ein Hit und ein Miss ist, ist es gut, sie zu entfernen.
% s/^//: Ersetzen Sie den Zeilenanfang durch vier Leerzeichen. Da Sie den Zeilenanfang eigentlich nicht durch etwas ersetzen können, werden am Zeilenanfang vier Leerzeichen eingefügt (dies wird von SO Formatierung benötigt, um den Code hervorzuheben).
Einige nützliche:
:set nu # displays lines
:44 # go to line 44
'. # go to last modification line
Mein Lieblings: Ctrl + n Wortvollendung!
In Insert mode
<C-A> - Increments the number under cursor
<C-X> - Decrements the number under cursor
Es ist sehr nützlich, wenn wir in vim fortlaufende Nummern erzeugen wollen
Sagen wir, ob wir die Zeilen 1-10 mit den Nummern 1 bis 10 einfügen möchten [wie "1" in der 1. Zeile, "2" in der 2. Zeile.]
füge "0" in die erste Zeile ein und kopiere die Zeile und die letzten 9 Male, so dass alle Zeilen "0" anzeigen.
Führen Sie den folgenden Ex-Befehl aus
:g/^/exe "norm " . line(".") . "\<C-A>"
Um vim ein bisschen mehr wie einen IDE Editor zu machen:
Ich liebe: ls Befehl.
Ich finde es ziemlich oft nützlich, einige Tastenzuordnungen direkt zu definieren, so wie man ein Makro definieren würde. Der Clou dabei ist, dass das Mapping rekursiv ist und solange ausgeführt wird, bis es fehlschlägt.
Beispiel:
enum ProcStats
{
ps_pid,
ps_comm,
ps_state,
ps_ppid,
ps_pgrp,
:map X /ps_<CR>3xixy<Esc>X
Gibt:
enum ProcStats
{
xypid,
xycomm,
xystate,
xyppid,
xypgrp,
Nur ein dummes Beispiel :).
Ich bin mir all der Nachteile voll und ganz bewusst - es kommt einfach so vor, dass ich es bei manchen Gelegenheiten ziemlich nützlich fand. Auch kann es interessant sein, es bei der Arbeit zu beobachten;).
Im Einfügemodus ctrl+x, ctrl+p Vervollständigt (mit einem Menü mit möglichen Vervollständigungen, wenn es Ihnen gefällt) den aktuellen langen Bezeichner, den Sie eingeben.
if (SomeCall(LONG_ID_ <-- type c-x c-p here
[LONG_ID_I_CANT_POSSIBLY_REMEMBER]
LONG_ID_BUT_I_NEW_IT_WASNT_THIS_ONE
LONG_ID_GOSH_FORGOT_THIS
LONG_ID_ETC
∶
Wiederverwendung
Bewegungen zum Mischen mit anderen Befehlen, mehr hier .
tx
fx
Fx
Verwenden Sie Ihre Lieblingswerkzeuge in Vim.
:r !python anything you want or awk or Y something
Wiederholen Sie diesen Vorgang im visuellen Modus, der in Kombination mit den obigen Tipps leistungsstark ist.
;
Alles ersetzen
:%s/oldtext/newtext/igc
Gib ein, um alle zu ersetzen :)
Um einen Text von Vim in Ihre Zwischenablage zu kopieren, damit er von einer anderen Anwendung verwendet werden kann, wählen Sie den Text aus, den Sie im visuellen Modus kopieren möchten, und drücken Sie dann "+ y. Auf diese Weise können Sie Ihren Text problemlos in andere Anwendungen einfügen.
Dies ist besonders nützlich, wenn Sie das Fenster vertikal geteilt haben und etwas aus dem rechten Fenster kopieren möchten. Die Verwendung von set mouse = r hilft Ihnen in dieser Situation nicht weiter, da auch im linken Fenster alles ausgewählt wird.
Beachten Sie, dass Ihr vim mit xterm-Unterstützung kompiliert werden muss.
Diese habe ich im Laufe der Jahre gesammelt.
" Pasting in normal mode should append to the right of cursor
nmap <C-V> a<C-V><ESC>
" Saving
imap <C-S> <C-o>:up<CR>
nmap <C-S> :up<CR>
" Insert mode control delete
imap <C-Backspace> <C-W>
imap <C-Delete> <C-O>dw
nmap <Leader>o o<ESC>k
nmap <Leader>O O<ESC>j
" tired of my typo
nmap :W :w
Verwenden Sie die rechte Maustaste, um den Einfügemodus in gVim mit den folgenden Einstellungen in ~/.gvimrc umzuschalten:
"
"------------------------------------------------------------------
" toggle insert mode <--> 'normal mode with the <RightMouse>-key
"------------------------------------------------------------------
nnoremap <RightMouse> <Insert>
inoremap <RightMouse> <ESC>
"
Erstellen Sie eine Funktion zum Ausführen des aktuellen Puffers mit Shebang (vorausgesetzt, einer ist gesetzt) und rufen Sie sie mit crtl-x auf.
map <C-X> :call CallInterpreter()<CR>
au BufEnter *
\ if match (getline(1) , '^\#!') == 0 |
\ execute("let b:interpreter = getline(1)[2:]") |
\ endif
fun! CallInterpreter()
if exists("b:interpreter")
exec("! ".b:interpreter." %")
endif
endfun
Versuchen Sie es mit perltidy
zum Formatieren mit =
Befehl im normalen Modus
:set equalprg=perltidy
Keine der folgenden Aussagen ist wirklich hartnäckig, aber ich finde es äußerst nützlich.
Trivialbindungen, aber ohne kann ich einfach nicht leben. Im Einfügemodus (mit der Strg-Taste) wird die Bewegung im Stil eines HJKL aktiviert. Im normalen Modus: Strg-k/j scrollt einen halben Bildschirm nach oben/unten und Strg-l/h geht zum nächsten/vorherigen Puffer. Die µ- und ù-Zuordnungen gelten speziell für eine AZERTY-Tastatur und gehen zum nächsten/vorherigen Make-Fehler.
imap <c-j> <Down>
imap <c-k> <Up>
imap <c-h> <Left>
imap <c-l> <Right>
nmap <c-j> <c-d>
nmap <c-k> <c-u>
nmap <c-h> <c-left>
nmap <c-l> <c-right>
nmap ù :cp<RETURN>
nmap µ :cn<RETURN>
Eine kleine Funktion, die ich geschrieben habe, um Funktionen, Globale, Makros, Strukturen und Typendefinitionen hervorzuheben. (Kann bei sehr großen Dateien langsam sein). Jeder Typ wird anders hervorgehoben (siehe ": Hilfegruppenname", um einen Überblick über die Einstellungen Ihres aktuellen Farbtons zu erhalten). Verwendung: Speichern Sie die Datei mit ww (Standard "\ ww"). Sie benötigen dafür ctags.
nmap <Leader>ww :call SaveCtagsHighlight()<CR>
"Based on: http://stackoverflow.com/questions/736701/class-function-names-highlighting-in-vim
function SaveCtagsHighlight()
write
let extension = expand("%:e")
if extension!="c" && extension!="cpp" && extension!="h" && extension!="hpp"
return
endif
silent !ctags --fields=+KS *
redraw!
let list = taglist('.*')
for item in list
let kind = item.kind
if kind == 'member'
let kw = 'Identifier'
elseif kind == 'function'
let kw = 'Function'
elseif kind == 'macro'
let kw = 'Macro'
elseif kind == 'struct'
let kw = 'Structure'
elseif kind == 'typedef'
let kw = 'Typedef'
else
continue
endif
let name = item.name
if name != 'operator=' && name != 'operator ='
exec 'syntax keyword '.kw.' '.name
endif
endfor
echo expand("%")." written, tags updated"
endfunction
Ich habe die Angewohnheit, viele Codes und Funktionen zu schreiben, und ich schreibe keine Prototypen dafür. Also habe ich einige Funktionen erstellt, um eine Liste von Prototypen in einer C-artigen Quelldatei zu generieren. Es gibt zwei Varianten: eine, die den Namen des formalen Parameters entfernt und eine, die ihn beibehält. Ich aktualisiere einfach die gesamte Liste jedes Mal, wenn ich die Prototypen aktualisieren muss. Es wird vermieden, dass Prototypen und Funktionsdefinitionen nicht synchronisiert werden. Benötigt auch ctags.
"Usage: in normal mode, where you want the prototypes to be pasted:
":call GenerateProptotypes()
function GeneratePrototypes()
execute "silent !ctags --fields=+KS ".expand("%")
redraw!
let list = taglist('.*')
let line = line(".")
for item in list
if item.kind == "function" && item.name != "main"
let name = item.name
let retType = item.cmd
let retType = substitute( retType, '^/\^\s*','','' )
let retType = substitute( retType, '\s*'.name.'.*', '', '' )
if has_key( item, 'signature' )
let sig = item.signature
let sig = substitute( sig, '\s*\w\+\s*,', ',', 'g')
let sig = substitute( sig, '\s*\w\+\(\s)\)', '\1', '' )
else
let sig = '()'
endif
let proto = retType . "\t" . name . sig . ';'
call append( line, proto )
let line = line + 1
endif
endfor
endfunction
function GeneratePrototypesFullSignature()
"execute "silent !ctags --fields=+KS ".expand("%")
let dir = expand("%:p:h");
execute "silent !ctags --fields=+KSi --extra=+q".dir."/* "
redraw!
let list = taglist('.*')
let line = line(".")
for item in list
if item.kind == "function" && item.name != "main"
let name = item.name
let retType = item.cmd
let retType = substitute( retType, '^/\^\s*','','' )
let retType = substitute( retType, '\s*'.name.'.*', '', '' )
if has_key( item, 'signature' )
let sig = item.signature
else
let sig = '(void)'
endif
let proto = retType . "\t" . name . sig . ';'
call append( line, proto )
let line = line + 1
endif
endfor
endfunction
Mein Lieblingsrezept zum Hin- und Herwechseln zwischen Fenstern:
function! SwitchPrevWin()
let l:winnr_index = winnr()
if l:winnr_index > 1
let l:winnr_index -= 1
else
"set winnr_index to max window open
let l:winnr_index = winnr('$')
endif
exe l:winnr_index . "wincmd w"
endfunction
nmap <M-z> :call SwitchPrevWin()
imap <M-z> <ESC>:call SwitchPrevWin()
nmap <C-z> :wincmd w
imap <C-z> <ESC>:wincmd w
Ich möchte einige meiner eigenen Konfigurationsdateien in after-directory
. Es ist besonders nützlich für ftplugin
.
Sie können vermeiden, eine lange Liste von Augroups in Ihre .vimrc-Datei zu schreiben, anstatt separate Dateien für jeden Typ.
Aber offensichtlich macht das Verzeichnis .vim/ftplugin dasselbe wie das Verzeichnis .vim/after/ftplugin, aber ich würde es vorziehen, das Verzeichnis .vim den Plugins zu überlassen.
per this thread
Um eine Reihe von Zeilen mit einem Präfix zu versehen, verwende ich einen von zwei verschiedenen Ansätzen:
Ein Ansatz ist die Blockauswahl (von etw). Im Allgemeinen können Sie einen rechteckigen Bereich mit Strg-V und anschließendem Bewegen des Cursors auswählen. Wenn Sie ein Rechteck markiert haben, drücken Sie die Umschalttaste, um Zeichen auf der linken Seite des Rechtecks einzufügen, oder die Umschalttaste, um sie auf der rechten Seite des Rechtecks anzuhängen. Mit dieser Technik können Sie also ein Rechteck erstellen, das die äußerste linke Spalte der Zeilen enthält, denen Sie das Präfix voranstellen möchten. Drücken Sie Shift-I, geben Sie das Präfix ein und drücken Sie dann Escape.
Der andere Ansatz ist die Verwendung einer Substitution (wie von Brian Agnew erwähnt). Brians Ersetzung wirkt sich auf die gesamte Datei aus (das% im Befehl bedeutet "alle Zeilen"). Um nur ein paar Zeilen zu bearbeiten, ist es am einfachsten, in der ersten/letzten Zeile die Umschalttaste V (die den visuellen Zeilenmodus aktiviert) zu drücken und dann in die letzte/erste Zeile zu wechseln. Dann tippe:
: s/^/DEIN PREFIX /
Das ^ ist ein regulärer Ausdruck (in diesem Fall der Zeilenanfang). Wenn Sie dies im visuellen Linienmodus eingeben, wird automatisch vor dem s ein <,> eingefügt. Dies bedeutet, dass der Bereich der Substitution die visuelle Auswahl ist.
Zusätzlicher Tipp: Wenn Ihr Präfix Schrägstriche enthält, können Sie diese entweder mit einem Backslash maskieren oder ein anderes Interpunktionszeichen als Trennzeichen im Befehl verwenden. Um beispielsweise C++ - Zeilenkommentare hinzuzufügen, schreibe ich normalerweise:
: s: ^: //:
Zum Hinzufügen eines Suffixes ist der Substitutionsansatz im Allgemeinen einfacher, wenn nicht alle Zeilen genau die gleiche Länge haben. Verwenden Sie einfach $ für das Muster anstelle von ^ und Ihre Zeichenfolge wird anstelle von vorangestellt angehängt.
Wenn Sie gleichzeitig ein Präfix und ein Suffix hinzufügen möchten, können Sie Folgendes tun:
: s /.*/ PREFIX & SUFFIX /
Das. * Stimmt mit der gesamten Zeile überein. Das & in der Ersetzung setzt den übereinstimmenden Text (die gesamte Zeile) zurück, aber jetzt werden Präfix und Suffix hinzugefügt.
Übrigens: Wenn Sie Code auskommentieren, möchten Sie ihn wahrscheinlich später auskommentieren. Sie können den visuellen Block (Strg-V) verwenden, um die Schrägstriche auszuwählen, und dann d drücken, um sie zu löschen, oder Sie können eine Ersetzung (wahrscheinlich mit einer visuellen Linienauswahl, die mit Umschalt-V erstellt wurde) verwenden, um die führenden Schrägstriche wie folgt zu entfernen :
: s: // ::
Zuordnungen, mit denen Bewegungen in der aktuellen Bildschirmzeile im Umbruchmodus ausgeführt werden. Ich habe dies vor einiger Zeit in einem Kommentar für einen Vim-Tipp entdeckt und es hat sich als recht praktisch erwiesen.
function! ScreenMovement(movement)
if &wrap
return "g" . a:movement
else
return a:movement
endif
endfunction
onoremap <silent> <expr> j ScreenMovement("j")
onoremap <silent> <expr> k ScreenMovement("k")
onoremap <silent> <expr> 0 ScreenMovement("0")
onoremap <silent> <expr> ^ ScreenMovement("^")
onoremap <silent> <expr> $ ScreenMovement("$")
nnoremap <silent> <expr> j ScreenMovement("j")
nnoremap <silent> <expr> k ScreenMovement("k")
nnoremap <silent> <expr> 0 ScreenMovement("0")
nnoremap <silent> <expr> ^ ScreenMovement("^")
nnoremap <silent> <expr> $ ScreenMovement("$")
Einige meiner Must-Haves sind:
cscope + ctags + vim, die im Web gefunden werden können.
Einige Abkürzungen für das schnelle Starten neuer Codedateien wie:
ab cpph #include <iostream><CR>#include <string><CR>#include <cstdlib><CR>#include <cassert><CR>#include <vector><CR>#include <
stdexcept><CR>using namespace std;<CR>int main(int argc, char *argv[]) {
ab perlh #!/usr/bin/Perl<CR>use strict;<CR>use warnings;<CR>
ab chdr #include <stdio.h><CR>#include <sys/types.h><CR>#include <unistd.h><CR>#include <stdlib.h><CR>#include <sys/stat.h><CR>
#include <sys/wait.h><CR>#include <string.h><CR>int main(int argc, char *argv[]) {
ab xhtmlhdr <?xml version="1.0" encoding="UTF-8"?><CR><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.o
rg/TR/xhtml1/DTD/xhtml1-strict.dtd"><CR><html xmlns="http://www.w3.org/1999/xhtml"><CR> <head><CR> <title></title><CR><link h
ref="style.css" rel="STYLESHEET" type="text/css"><CR></head>
Beispielsweise fügt cpph ein Grundgerüst einer main.cc-Datei ein
Es gibt auch meine Zuordnung der Funktionstasten:
map <F1> <Esc>:w<CR>:Perl $e = `./error.pl`; my ($f,$l,@w) = split(":",$e); my $w=join(":",@w); $curwin->Cursor($l,0); VIM::Msg($w);<CR>
map <F2> :wincmd w<CR>
map <F3> :wincmd s<CR>
map <F4> :wincmd v<CR>
map <F5> :wincmd o<CR>
map <F6> :sball<CR>
map <F7> :wq<CR>
map <F8> :wincmd q<CR>
map <F9> :wincmd -<CR>
map <F10> :wincmd +<CR>
map <F11> :wincmd <<CR>
map <F12> :wincmd ><CR>
In diesem Fall wird mein F1 zugeordnet, um den Cursor auf den nächsten Fehler zu setzen, der für eine Quellcodemigration korrigiert werden muss.
map _ ebi"^[ea"^[
Diese Map würde dazu führen, dass _ einen String zitiert
Meins verwendet Makros anstelle von Suchen - das Kombinieren eines Makros mit dem visuellen Modus ist manchmal effizienter.