Technisch gesehen positionieren zz, zt, zb den Bildschirm mit dem Cursor in der Mitte / oben / unten. Um den Cursor in der Mitte / oben / unten zu positionieren, verwenden Sie M, H oder L. Beide Befehlssätze sind nützlich!
Peter
1
Das Lesen dieses Beitrags vor Monaten oder einem Jahr hat mir seitdem jeden Tag geholfen. Dank dieses Beitrags verschiebe ich Absätze mehrmals pro Stunde.
Funkodebat
33
Ich habe noch nie so viele Tricks von einer Seite aufgegriffen, die als nicht konstruktiv markiert wurde :) Vielen Dank an alle.
Tasos Bitsios
Antworten:
315
Ich wünschte wirklich, ich hätte gewusst, dass Sie verwenden können, CtrlCanstatt aus Escdem Einfügemodus zu wechseln. Das war für mich ein echter Produktivitätsschub.
Ich habe meine Feststelltaste einem Esc zugeordnet. Das ist beides einfacher als das normale Esc und Ctrl-C
Kasper
114
Heiliger Strohsack. 15 Jahre vi und ich wusste das nie ...
Chris K
31
Ein weiteres beliebtes Ziel ist die Verwendung von 'jj' für ESC. Ich mag diesen Ansatz bisher. :Karte! jj <ESC>
Claytron
27
Sie können auch STRG- [verwenden (was mir gefällt, weil es beide kleinen Finger sind ... nur eine kleine Drehung beider Hände).
Jason Down
42
Verwenden Sie 'jk' als Variante für @ Claytron's. Wenn Sie sich unwissentlich bereits im INSERT-Modus befinden, lässt jk Sie dort, wo Sie waren, sodass Sie ihn jederzeit treffen können (Kredit: jemand anderes ... nicht meine Idee).
Kyle
197
Der letzte "Wow" -Trick, den ich gelernt habe, ist eine Methode zum komplizierten Suchen und Ersetzen. In der Vergangenheit hatte ich sehr oft einen wirklich komplizierten regulären Ausdruck, an dem Substitutionen vorgenommen werden konnten, und er hat nicht funktioniert. Es gibt einen besseren Weg:
:set incsearch " I have this in .vimrc
/my complicated regexp " Highlighted as you enter characters
:%s//replace with this/ " You don't have to type it again
Der "Trick" hier (aus Mangel an einem besseren Wort) ist die Art und Weise, wie Sie die Suche verwenden können, um den regulären Ausdruck zu erstellen (und 'incsearch' hebt ihn hervor, wenn Sie Zeichen eingeben) und dann ein leeres Muster in der Ersetzung verwenden: das leere Das Muster ist standardmäßig das letzte Suchmuster.
Ja, ich wünschte, ich wüsste es früher. Aber das ist es, was ich über alles sage, was ich lerne, was in vim neu ist.
Robert Massaioli
26
Wenn Sie dies wirklich lieben, versuchen Sie, <Ctrl-R>/die letzte Suchabfrage einzufügen. (Siehe :help i_CTRL-R) Wirklich nützlich für ähnliche wie oben, aber Sie möchten einen Teil der Suchergebnisse erfassen. (wie diese: %s:/\\([fF]rank\\) and mary/marie and \1/g)
idbrii
4
:%s//...funktioniert auch mit *(Suchwort unter Cursor). Ein Plugin namens Visual-Star-Search erweitert die Funktionalität *, um den gesamten Text einer visuellen Auswahl abzugleichen. Dies erleichtert das Suchen und Ersetzen des ausgewählten Textes, z. B. v3e(3 Wörter visuell auswählen) *(Suche) und :%s//replacement/g(Alle Vorkommen durch "ersetzen) Ersatz"). Ich benutze dies so oft, dass ich eine Zuordnung für den globalen Substitutionsbefehl habe : :nmap <Leader>s :%s///g<left><left>.
Patrick Oscity
1
@idbrii, da Leute, die lesen, vielleicht Vim Noobs (ich) sind, %s:sollte das sein :%s, und für mein System brauchte ich \(\)stattdessen\\(\\)
Charlie Gorichanaz
155
Ich habe diese Referenz meines am häufigsten verwendeten Befehls für einen Freund von mir erstellt:
select v
select row(s) SHIFT + v
select blocks (columns) CTRL + v
indent selected text >
unindent selected text <
list buffers :ls
open buffer :bN (N = buffer number)
print :hardcopy
open a file :e /path/to/file.txt
:e C:\Path\To\File.txt
sort selected rows :sort
search for word under cursor *
open file under cursor gf
(absolute path or relative)
format selected code =
select contents of entire file ggVG
convert selected text to uppercase U
convert selected text to lowercase u
invert case of selected text ~
convert tabs to spaces :retab
start recording a macro qX (X = key to assign macro to)
stop recording a macro q
playback macro @X (X = key macro was assigned to)
replay previously played macro * @@
auto-complete a word you are typing ** CTRL + n
bookmark current place in file mX (X = key to assign bookmark to)
jump to bookmark `X (X = key bookmark was assigned to
` = back tick/tilde key)
show all bookmarks :marks
delete a bookmark :delm X (X = key bookmark to delete)
delete all bookmarks :delm!
split screen horizontally :split
split screen vertically :vsplit
navigating split screens CTRL + w + j = move down a screen
CTRL + w + k = move up a screen
CTRL + w + h = move left a screen
CTRL + w + l = move right a screen
close all other split screens :only
* - As with other commands in vi, you can playback a macro any number of times.
The following command would playback the macro assigned to the key `w' 100
times: 100@w
** - Vim uses words that exist in your current buffer and any other buffer you may have open for auto-complete suggestions.
Sie listen "~ X" auf, um zur Marke mit dem Namen X zu gelangen. Das funktioniert bei mir nicht - stattdessen verwende ich "'X" (einfaches Anführungszeichen).
Beeindruckend. Du hast absolut recht. Als ich die Anleitung abtippte, sah mein Auge wohl nur die Tilde und beschönigte die hintere Zecke. Ich werde entsprechend aktualisieren. Danke für die Warnung.
Brian Newman
5
Diese Liste ist schön, aber ich möchte wirklich wissen, wie Sie diesen Tisch gezeichnet haben. mit VIM? welches Plugin? Ich suche derzeit eine.
Kent
6
Ich habe VIM verwendet, aber kein Plugin. Jedoch; Die Verwendung der Auswahlblockfunktion machte es relativ einfach. Ich bin froh, dass Sie die Liste nützlich fanden! ~ Brian
Brian Newman
11
Strg-Q für die Blockauswahl ist eine Besonderheit von mswin.vim, mit der STRG-V eingefügt werden kann. Die meisten vim-Benutzer würden dies als böse betrachten und mswin.vim deaktivieren. "+ P oder Strg-R + ist nicht so schwer zu tippen, um Inhalte aus der Zwischenablage einzufügen.
Benoit
144
gi wechselt in den Einfügemodus und platziert den Cursor an der Stelle, an der er zuvor war.
Ich war so glücklich, als ich herausfand, dass g;mich das zu Tränen
rührt
@ Longdeqidao überhaupt nicht. Es kehrt zur letzten Einfügemarke zurück. So können Sie nach Herzenslust scrollen und gelangen dorthin zurück, wo Sie zuletzt eingefügt haben.
Cyber Oliveira
9
Zu Ihrer Information, g; (welches @PatrickOscity oben erwähnt) setzt den Cursor an die Stelle, an der eine Bearbeitung vorgenommen wurde. Sie können es mehrmals verwenden, um in den Verlauf zurückzukehren. Ich nehme das hier zur Kenntnis, weil meine vim-Hilfe dies aus irgendeinem seltsamen Grund nicht erwähnt.
PonyEars
13
Vims Intuitivität beeindruckt mich immer wieder. Da @PonyEars erwähnt hat, habe g;ich versucht, ob das "Gegenteil" davon wäre g,und siehe da, wir können hin und her gehen!
Cyber Oliveira
aist kürzer. :) Ist aber giin der Tat sehr intuitiv, wobei es sich gnormalerweise um eine entgegengesetzte Operation handelt.
Erwin Rooijakkers
105
: q!
Ich wünschte, ich wüsste das, bevor ich zum ersten Mal mit vi anfing.
Als Emacs-Typ ist das der lustigste Kommentar, den ich gelesen habe. Ich bin mir nicht sicher, ob du es so gemeint hast. Du hast mich heute glücklich gemacht.
pjammer
29
Ich erinnere mich, dass ich am selben Tag zum ersten Mal Vim und Emacs ausprobiert habe und auch nicht wusste, wie ich aussteigen soll. Ich dachte mir, was zum Teufel ist mit diesen Leuten los?
Physikmichael
13
+1. Wenn Sie vim zum ersten Mal starten, sollte die Standardmeldung "write: q to quit" lauten. Ich hätte so viel Zeit gespart lol
José Ramón
2
@ JoséRamón Aber es tut es auf dem Bildschirm standardmäßig angezeigt , wenn Sie ohne das Öffnen einer Datei eingeben vim. Wurde dies kürzlich hinzugefügt? Ich kann mich noch gut daran erinnern, wie ich es vor Jahren versucht habe und es war schon da. Sie werden auch aufgefordert, zu verwenden, :q!wenn Sie versuchen, das Programm zu beenden, ohne den Puffer zu speichern.
Mechalynx
5
@ivy_lynx Ja, Sie haben vielleicht Recht, aber nur, wenn Sie vim ohne Dateien öffnen. Normalerweise öffnen Sie vim zum ersten Mal, weil Sie eine Konfigurationsdatei unter Unix bearbeiten müssen. Sie schreiben also "$ vim file" und können keinen Ausweg finden. Oder bin ich der einzige?
José Ramón
56
^ XF wird mit Dateinamen aus dem aktuellen Verzeichnis abgeschlossen. Kein Kopieren / Einfügen mehr vom Terminal oder schmerzhafte Doppelprüfung.
^ XP wird mit Wörtern in der aktuellen Datei abgeschlossen
: set scrollbind zwingt einen Puffer, neben einem anderen zu scrollen. Teilen Sie beispielsweise Ihr Fenster in zwei vertikale Fenster. Laden Sie jeweils eine Datei (möglicherweise unterschiedliche Versionen derselben Datei). Tun Sie :set scrollbindin jedem. Wenn Sie jetzt in einem Fenster scrollen , werden beide Fenster zusammen gescrollt. Ideal zum Vergleichen von Dateien.
^ XP wird mit Präferenz gegenüber vorherigen Wörtern in der Datei abgeschlossen, ^ XN mit Präferenz gegenüber den nächsten Wörtern in der Datei.
u0b34a0f6ae
Sie können Dateien auch unterscheiden, indem Sie Datei1 öffnen und :diffsplit file2vim ausführen oder einfach mit starten vim -d file1 file2. Vim bindet die beiden Dateien automatisch.
Brian McCutchon
51
Sie können eine ganze Reihe von Befehlen verwenden, um Text in Klammern / Klammern / Anführungszeichen / Tags zu ändern. Es ist sehr nützlich zu vermeiden, den Anfang und das Ende der Gruppe finden zu müssen. Versuchen Sie es ci(, ci{, ci<, ci", ci', ctje nachdem, welche Art von Objekt Sie ändern möchten. Und die ca(, ca{, ...Varianten löschen auch die Klammern / Anführungszeichen.
Leicht zu merken: Ändern Sie eine Anweisung in Klammern / ändern Sie eine Anweisung in Klammern.
das ist nicht nur für c. Sie können dies tun, um dzu löschen (z. B. di (oder da ()), yzu ziehen, vauszuwählen usw.
Nathan Fellman
Hallo! Ich würde gerne wissen, welche Dokumentation dafür verwendet wird :help. Ich kann es nirgendwo finden. > _ <
Matej
1
@Peter Ich habe diese bereits überprüft, konnte aber keine Erwähnung des eigentümlichen "inneren + Begrenzer" -Verhaltens finden. Es stellt sich heraus, in zu sein :help motion.txt! Vielen Dank!
Matej
2
Dieser Tipp ist der einzige Grund, warum ich überhaupt zu vi gewechselt bin :)
Justin L.
1
Wenn Sie HTML oder XML bearbeiten, können Sie citden Inhalt des aktuellen Tags ändern. Zum Beispiel in <span>Some text</span>, wenn Sie den Cursor über den „m“ Sie tun können , ditzu erhalten <span></span>.
Jonathan Potter
47
Drücken Sie Escniemals. In dieser Antwort erfahren Sie, warum . Wie oben erwähnt, ist Ctrl+ Ceine bessere Alternative. Ich empfehle dringend, Ihren Caps LockSchlüssel zuzuordnen, um zu entkommen.
Wenn Sie eine Ctags- kompatible Sprache bearbeiten , ist die Verwendung einer Tags-Datei und :ta, Ctrl+ ]usw. eine hervorragende Möglichkeit, den Code auch über mehrere Dateien hinweg zu navigieren. Außerdem ist die Vervollständigung von Ctrl+ Nund Ctrl+ Pmithilfe der Tags-Datei eine hervorragende Möglichkeit, um Tastenanschläge zu reduzieren.
Wenn Sie eine Zeile bearbeiten, die umbrochen wird, weil sie breiter als Ihr Puffer ist, können Sie mit gk und gj nach oben / unten wechseln.
Versuchen Sie, sich auf die effektive Verwendung der Bewegungsbefehle zu konzentrieren, bevor Sie schlechte Gewohnheiten lernen. Dinge wie 'dt' oder 'd3w' verwenden, anstatt xa ein paar Mal zu drücken. Grundsätzlich gibt es jedes Mal, wenn Sie dieselbe Taste wiederholt drücken, wahrscheinlich eine bessere / schnellere / präzisere Möglichkeit, dasselbe zu erreichen.
Versuchen Sie 'man ctags', wenn Sie * nix verwenden, um zu lernen, wie Sie eine "Tags" -Datei generieren, die vim mitteilt, wie die Definition einer Funktion oder Variablen in vielen Sprachen zusätzlich zu C gefunden wird. Verwenden Sie Strg +], um die Definition zu finden des Tokens unter Ihrem Cursor oder verwenden Sie: tag tokenToFind, um ein bekanntes Token zu finden. Sie können vim sogar mit "vim -t tokenToFind" starten, um die entsprechende Datei zu öffnen und den Cursor auf die Funktion zu positionieren, die Sie bearbeiten müssen.
Adam Liss
23
Die Taste # sucht in umgekehrter Richtung nach dem Wort unter dem Cursor
Nicht ganz genau. Funktioniert wie :x, bei dem die Datei nur bei Änderungen gespeichert wird, während :wqdie Datei immer gespeichert wird.
Erik B
ZQ (funktioniert wie: q!)
Xialu
42
Einige meiner neuesten Ergänzungen zu meinem Vim-Brainstore:
^wi: Springen Sie zum Tag unter dem Cursor, indem Sie das Fenster teilen.
cib/ciB: Ändern Sie den Text in der aktuellen Klammer () bzw. in geschweiften Klammern {}.
:set listchars=tab:>-,trail:_ list: Tabulatoren / nachgestellte Leerzeichen anzeigen, die sich optisch von anderen Leerzeichen unterscheiden. Es hilft sehr bei der Python-Codierung.
auch: ciw das aktuelle Wort zu ändern (oder Krächzen, das gleiche , aber die linke Hand nur) CIW die aktuelle W = o zu ändern (rd) mit v Sames anstelle von c in der visuellen wählen wird anstatt sie zu ersetzen.
lajarre
5
cib entspricht der Eingabe von "ci (". Sie können auch "ci [", "ci {" oder (wenn Ihr vimrc korrekt eingerichtet ist) "ci <" für andere Arten von Klammern ausführen.
Tom Lord
2
Außerdem "cit", um den Text in einem Tag zu ändern. Sehr nützlich bei der Arbeit mit XML / HTML.
Walter
Erwähnenswert ist auch, dass Sie stattdessen ein Suffix mit der schließenden Klammer verwenden können, falls Sie dies bevorzugen. Außerdem habe ich gerade etwas über ci}& cit- wow gelernt , das wird sehr nützlich sein. vi[m]beweist ein sehr aufregendes Programm!
underscore_d
37
gv startet den visuellen Modus und wählt automatisch aus, was Sie zuvor ausgewählt haben.
: shell , um eine Shell-Konsole von Vim aus zu starten. Nützlich, wenn Sie beispielsweise ein Skript testen möchten, ohne Vim zu beenden. Drücken Sie einfach ^ d, wenn Sie mit der Shell-Konsole fertig sind, und kehren Sie dann zu Vim und Ihrer bearbeiteten Datei zurück.
Ich denke :!shwar zu schwer. Ich bevorzuge das, weil es einfacher ist, Befehlszeilen mit Registern / Vervollständigungen aus dem aktuellen Puffer zu %%:h
erstellen
1
Dieser ist sehr cool. Ich benutze es jeden Tag .. Vorher war es ,: wq, mache Cli-Sachen, öffne vim mit der gleichen Datei wieder .. Tolle Optimierung
Flashin
7
Strg-Z, um zur Shell zu wechseln, und fg <ENTER>, um zu vim zurückzukehren.
Mario G.
Geben Sie map <Esc>! :shell<CR>Ihre ein .vimrc, und Sie können die Shell nur mit Alt +! Oder Alt + Shift + 1 starten. (Mnemonik: :!{cmd}wird {cmd}mit der Muschel ausgeführt.)
Musiphil
:shellstartet jedoch eine neue verschachtelte Shell-Ebene. Während ctrl-znicht.
Sie werden nach einer Passphrase gefragt, diese bearbeitet und gespeichert. Wenn Sie die Datei in vi erneut öffnen, müssen Sie das Kennwort eingeben, um sie anzuzeigen.
Synchronisiere dies mit deiner Dropbox und du bekommst einen wirklich netten Passwort Manager ;-)
Luis Nell
15
Beachten set cryptmethod=blowfishSie jedoch, dass ein Algorithmus mit lächerlicher Stärke verwendet wird , sofern Sie nicht (nur in Version 7.3+ verfügbar). Siehe help encryptionfür weitere Details.
AB
3
Bitte verwenden Sie keine VIM-Verschlüsselung, ist keine gute Verschlüsselung und schlechte Sicherheit ist am schlimmsten als keine. Weitere Informationen: github.com/neovim/neovim/issues/694
Nicht viel, wirklich. Sie benötigen eine Makefileim aktuellen Verzeichnis.
Kompilieren
Geben Sie in Vim ein, :makeum eine Shell aufzurufen und Ihr Programm zu erstellen. Machen Sie sich keine Sorgen, wenn die Ausgabe vorbeirollt. Drücken EnterSie einfach, wenn Sie fertig sind, um zu Vim zurückzukehren.
Die Magie
Zurück in Vim stehen Ihnen folgende Befehle zur Verfügung:
:cl listet die Fehler, Warnungen und anderen Meldungen auf.
:ccZeigt die aktuelle Fehler- / Warnmeldung am unteren Bildschirmrand an und springt zur fehlerhaften Zeile in Ihrem Code.
:cc nspringt zur nth Nachricht.
:cn geht zur nächsten Nachricht über.
:cp springt zur vorherigen Nachricht.
Da sind mehr; Wenn Sie interessiert sind, geben Sie :help :ccin Vim ein.
Wow, ich wusste nichts über ^ O und ^ I: das ist großartig. Könnte es wert sein, :help jump-motionsusw. in Ihre Antwort aufzunehmen, falls jemand weitere Informationen wünscht.
DrAl
Schauen Sie sich ShowMarks vim.org/scripts/script.php?script_id=152 an . Es hilft Ihnen, sich zu erinnern, wo und was sich alle Ihre Markierungen in einem Puffer befinden. Sie können die Visualisierung mit \ mt
Tester
Ich verstehe den Unterschied zwischen ^ P und ^ N nicht ...
lajarre
@lajarre sie radeln durch die Liste der verfügbaren
Abschlüsse
2
Ich benutze oft ^ O ^ O, wenn ich Vim öffne, nachdem ich bemerkt habe, dass ich die zuletzt bearbeitete Datei erneut bearbeiten möchte. Riesige Zeitersparnis!
Patrick Oscity
24
Drücken Sie, %wenn sich der Cursor auf einem Anführungszeichen, einer Klammer, einer Klammer oder einer Klammer befindet, um die Übereinstimmung zu finden.
Befindet sich der Cursor nicht über einem dieser Cursor, bewegt er sich nach rechts, bis er auf einen von ihnen trifft.
Cyber Oliveira
@ Léo: Danke für den Bonus-Tipp!
Adam Liss
22
Bis [Zeichen] ( t). Es ist nützlich für jeden Befehl, der einen Bereich akzeptiert. Mein Favorit ist ct;oder ct)löscht alles bis zum nachfolgenden Semikolon / schließenden Klammern und versetzt Sie dann in den Einfügemodus.
Auch Gund ggsind nützlich (Gehe nach unten bzw. oben).
Das beste hier, obwohl einige der anderen auch nützlich sind, wusste ich nur schon über sie alle
Bescheid
1
Auch fstattdessen t, was durch diesen Charakter [Aktion] wird ; Wenn Sie beispielsweise den Cursor am Anfang eines Funktionsarguments haben, df,wird dieser gelöscht (natürlich in geeigneten Sprachen).
Actorclavilis
t und f eignen sich hervorragend zum Bearbeiten eines Teils einer camelCase-Variablen. Wenn Sie beispielsweise gerade eine Zeile dupliziert haben und firstVariable in secondVariable ändern müssen, positionieren Sie Ihren Cursor am Anfang von firstVariable und dann von ctV
Greg
1
T und F funktionieren auch, aber in die entgegengesetzte Richtung.
Fede
20
^r^w um das Wort im Befehlsmodus unter den Cursor einzufügen.
Dies ist sehr nützlich, wenn Sie grep- oder replace-Befehle verwenden.
: gefolgt von Zeilennummer macht das gleiche: 42 geht zu Zeilennummer 42
Anti Veeranna
12
Die Eingabe einer Zeilennummer gefolgt von G hat den gleichen Effekt.
Cyber Oliveira
3
<number>gogeht zum <number>th Zeichen in der Datei.
Actorclavilis
17
Ich wünschte, ich hätte früher grundlegende Dinge im visuellen Blockmodus gekannt. Selbst wenn Sie Vim für nichts anderes verwenden, kann es eine große Zeitersparnis sein, eine Datei in Vim nur für einige Blockoperationen zu öffnen. Ich bin mir ziemlich sicher, dass ich eine Menge Zeit damit verschwendet habe, solche Dinge manuell zu tun.
Beispiele, die ich besonders nützlich fand, wenn ich beispielsweise Listen symbolischer Konstantennamen konsistent umgestaltete:
Aktivieren Sie den Visual Block-Modus ( Ctrl+ Qfür mich unter Windows anstelle von Ctrl+ V)
Bewegen Sie den Cursor, um den gewünschten Block zu markieren.
Dann, I whatever textund drückt Escden Text vor dem Block auf jeder Zeile eingefügt zu haben.
Verwenden Sie Astatt I, um den Text nach dem Block in jede Zeile einzufügen.
Außerdem kann das einfache Umschalten des Falls einer visuellen Auswahl ~eine große Zeitersparnis bedeuten.
... und ^ E werden das Zeichen unter dem Cursor einfügen
zu viel PHP
funktioniert bei mir nicht, es bewegt nur einen Cursor an den Anfang des Textes
Alex
14
q <letter> - zeichnet ein Makro auf.
und
@ <same-letter> - spielt es ab.
Dies sind bei weitem die nützlichsten Befehle in Vim, da der Computer eine Menge Arbeit für Sie erledigen kann und Sie nicht einmal ein Programm oder etwas anderes schreiben müssen.
Die Verwendung von qvereinfacht die Sache, aber Sie müssen sie nicht verwenden: Speichern Sie einfach den Pufferbefehl in einem benannten Puffer "- zum Beispiel mit buffer a- "ad$...
Mei
@Mei qzeichnet ein Makro auf; Makros können Befehle enthalten, nicht nur Text, sondern "ad$unterscheiden sich von qa.
Brian McCutchon
@Sortofabeginner Das ist hier irrelevant. Der Befehl "ad $ setzt Text in Puffer a und qa führt ihn aus.
Mei
2
@Mei qaführt es nicht aus; qazeichnet es auf und @aführt es aus. Es ist wahr, dass Sie ein Makro im Klartext schreiben, es im Register amit so etwas speichern "ad$und dann mit ausführen können @a, aber das ist einiges mehr Arbeit. Es gibt einen grundlegenden Unterschied zwischen Ausschneiden und Einfügen und Aufzeichnen und Ausführen.
Brian McCutchon
Doh! Ich wusste, dass. Danke für die Korrektur
Mei
13
Öffnen mehrerer Dateien mithilfe von Registerkarten
:tabe filepath
Navigieren zwischen geöffneten Dateien
gt and gT or :tabn and :tabp
Speichern Sie die geöffnete Sitzung, damit Sie später zu Ihrer Liste der geöffneten Dateien zurückkehren können
:mksession session_file_name.vim
Öffnen Sie eine erstellte Sitzung
vim -S session_file_name.vim
Schließen Sie alle Dateien gleichzeitig
:qa
Ein weiterer Befehl, den ich kürzlich gelernt habe
autocmd
Sie können damit einen Befehl für ein Ereignis ausführen, sodass Sie beispielsweise den Befehl make ausführen können, wenn Sie eine Datei mit folgenden Elementen speichern:
qx beginnt mit der Aufzeichnung von Tastenanschlägen. Sie können so ziemlich jede Bearbeitungsaufgabe erledigen, und Vim erinnert sich daran. Hit q wieder , wenn Sie fertig sind , und drücken Sie @x Ihre Tastatureingaben zu wiederholen. Dies ist ideal für sich wiederholende Änderungen, die zu komplex sind, um ein Mapping zu schreiben. Sie können viele Aufnahmen machen, indem Sie ein anderes Zeichen als x verwenden .
Das gleiche Zeichen 'x' wird auch vom Befehl 'q' für das Aufzeichnungsmakro und den benannten Zwischenablagen ("x ...)" verwendet. Sie können Makroausschnitte in Ihrer Datei belassen und in eine benannte Zwischenablage kopieren (z. B. "xyy") ) und spielen Sie sie dann wieder (@x).
Cyber Oliveira
Und wenn Sie jemals das awesomist-Makro erstellen, können Sie diese Zwischenablage mit einem 'let @x = ""' (das Makro in das "" setzen) in Ihr _vimrc einfügen und für immer speichern!
Kearns
11
Ich muss sagen, dass einer meiner Favoriten das Hilfefenster in einen neuen Tab einfügt:
:tab help <help_topic>
Dies öffnet Hilfe in einem neuen Tab und als jemand, der Vim-Tabs liebt, ist dies lächerlich nützlich.
Puffer sind die Registerkarten von vim. Sie werden vom vim-Workflow besser unterstützt. Ich vermute, dass Tabs nur zu vim hinzugefügt wurden, weil zu viele Leute Puffer nicht verstanden haben.
still_dreaming_1
Ok, sehr bald nachdem ich das gesagt hatte, fand ich eine Verwendung für Tabs in vim. Wenn Sie einen Puffer pro Registerkarte verwenden, müssen Sie sich mit Puffern vertraut machen. So sollten Tabs nicht in vim verwendet werden. Die meisten fortgeschrittenen vim-Benutzer verwenden Puffer, wie Registerkarten in den meisten Programmen verwendet werden. Viele Leute denken, Tabs hätten in vim Layouts heißen sollen. Sie dienen hauptsächlich dazu, verschiedene Fenstersammlungen in verschiedenen Registerkarten zu öffnen. Sie können auch einen bestimmten Puffer haben, den Sie auf einer Registerkarte wieder öffnen, und auf der anderen Registerkarte alle anderen Puffer anzeigen.
still_dreaming_1
9
cw
Wort ändern - löscht das Wort unter dem Cursor und versetzt Sie in den Einfügemodus, um ein neues einzugeben. Natürlich funktioniert dies mit anderen Bewegungstasten, so dass Sie Dinge wie c $ tun können , um zum Ende der Zeile zu wechseln.
f + Zeichen
Findet das nächste Vorkommen des Zeichens in der aktuellen Zeile. Sie können also vft ausführen , um den gesamten Text bis zum nächsten "t" in der aktuellen Zeile auszuwählen. Es ist eine weitere Bewegungstaste, daher funktioniert es auch mit anderen Befehlen.
:b [any portion of a buffer name]Puffer wechseln. Wenn Sie also zwei Puffer haben, "somefile1.txt" und "someotherfile2.txt", können Sie mit einfach zum zweiten wechseln ":b 2.t<enter>". Es unterstützt auch das Ausfüllen von Registerkarten, obwohl dies nicht erforderlich ist.
Apropos Tab-Vervollständigung, die Einstellung :set wildmode=full wildmenuist auch sehr hilfreich. Es ermöglicht die vollständige Vervollständigung der Registerkarten für den Befehlsmodus sowie ein sehr hilfreiches Menü im Fluchstil mit allen möglichen Übereinstimmungen, wenn es verwendet wird.
Sie können andere Zeichen als /(Schrägstrich) verwenden, um Muster für die Ersetzung zu trennen. Auf diese Weise müssen Sie den Schrägstrichen der Dateipfade nicht entkommen.
Antworten:
Ich wünschte wirklich, ich hätte gewusst, dass Sie verwenden können, CtrlCanstatt aus Escdem Einfügemodus zu wechseln. Das war für mich ein echter Produktivitätsschub.
quelle
Der letzte "Wow" -Trick, den ich gelernt habe, ist eine Methode zum komplizierten Suchen und Ersetzen. In der Vergangenheit hatte ich sehr oft einen wirklich komplizierten regulären Ausdruck, an dem Substitutionen vorgenommen werden konnten, und er hat nicht funktioniert. Es gibt einen besseren Weg:
Der "Trick" hier (aus Mangel an einem besseren Wort) ist die Art und Weise, wie Sie die Suche verwenden können, um den regulären Ausdruck zu erstellen (und 'incsearch' hebt ihn hervor, wenn Sie Zeichen eingeben) und dann ein leeres Muster in der Ersetzung verwenden: das leere Das Muster ist standardmäßig das letzte Suchmuster.
Beispiel:
Gleichwertig:
Sehen:
quelle
<Ctrl-R>/
die letzte Suchabfrage einzufügen. (Siehe:help i_CTRL-R
) Wirklich nützlich für ähnliche wie oben, aber Sie möchten einen Teil der Suchergebnisse erfassen. (wie diese:%s:/\\([fF]rank\\) and mary/marie and \1/g
):%s//...
funktioniert auch mit*
(Suchwort unter Cursor). Ein Plugin namens Visual-Star-Search erweitert die Funktionalität*
, um den gesamten Text einer visuellen Auswahl abzugleichen. Dies erleichtert das Suchen und Ersetzen des ausgewählten Textes, z. B.v3e
(3 Wörter visuell auswählen)*
(Suche) und:%s//replacement/g
(Alle Vorkommen durch "ersetzen) Ersatz"). Ich benutze dies so oft, dass ich eine Zuordnung für den globalen Substitutionsbefehl habe ::nmap <Leader>s :%s///g<left><left>
.%s:
sollte das sein:%s
, und für mein System brauchte ich\(\)
stattdessen\\(\\)
Ich habe diese Referenz meines am häufigsten verwendeten Befehls für einen Freund von mir erstellt:
quelle
gi wechselt in den Einfügemodus und platziert den Cursor an der Stelle, an der er zuvor war.
quelle
g;
mich das zu Träneng;
ich versucht, ob das "Gegenteil" davon wäreg,
und siehe da, wir können hin und her gehen!a
ist kürzer. :) Ist abergi
in der Tat sehr intuitiv, wobei es sichg
normalerweise um eine entgegengesetzte Operation handelt.Ich wünschte, ich wüsste das, bevor ich zum ersten Mal mit vi anfing.
quelle
:q!
wenn Sie versuchen, das Programm zu beenden, ohne den Puffer zu speichern.^ XF wird mit Dateinamen aus dem aktuellen Verzeichnis abgeschlossen. Kein Kopieren / Einfügen mehr vom Terminal oder schmerzhafte Doppelprüfung.
^ XP wird mit Wörtern in der aktuellen Datei abgeschlossen
: set scrollbind zwingt einen Puffer, neben einem anderen zu scrollen. Teilen Sie beispielsweise Ihr Fenster in zwei vertikale Fenster. Laden Sie jeweils eine Datei (möglicherweise unterschiedliche Versionen derselben Datei). Tun Sie
:set scrollbind
in jedem. Wenn Sie jetzt in einem Fenster scrollen , werden beide Fenster zusammen gescrollt. Ideal zum Vergleichen von Dateien.quelle
:set noscb
zum Ausschalten und:set scb
zum Einschalten (nicht:scrollbind
).:h scrollbind
:diffsplit file2
vim ausführen oder einfach mit startenvim -d file1 file2
. Vim bindet die beiden Dateien automatisch.Sie können eine ganze Reihe von Befehlen verwenden, um Text in Klammern / Klammern / Anführungszeichen / Tags zu ändern. Es ist sehr nützlich zu vermeiden, den Anfang und das Ende der Gruppe finden zu müssen. Versuchen Sie es
ci(, ci{, ci<, ci", ci', ct
je nachdem, welche Art von Objekt Sie ändern möchten. Und dieca(, ca{, ...
Varianten löschen auch die Klammern / Anführungszeichen.Leicht zu merken: Ändern Sie eine Anweisung in Klammern / ändern Sie eine Anweisung in Klammern.
quelle
c
. Sie können dies tun, umd
zu löschen (z. B. di (oder da ()),y
zu ziehen,v
auszuwählen usw.:help
. Ich kann es nirgendwo finden. > _ <:help motion.txt
! Vielen Dank!cit
den Inhalt des aktuellen Tags ändern. Zum Beispiel in<span>Some text</span>
, wenn Sie den Cursor über den „m“ Sie tun können ,dit
zu erhalten<span></span>
.Drücken Sie Escniemals. In dieser Antwort erfahren Sie, warum . Wie oben erwähnt, ist Ctrl+ Ceine bessere Alternative. Ich empfehle dringend, Ihren Caps LockSchlüssel zuzuordnen, um zu entkommen.
Wenn Sie eine Ctags- kompatible Sprache bearbeiten , ist die Verwendung einer Tags-Datei und
:ta
, Ctrl+ ]usw. eine hervorragende Möglichkeit, den Code auch über mehrere Dateien hinweg zu navigieren. Außerdem ist die Vervollständigung von Ctrl+ Nund Ctrl+ Pmithilfe der Tags-Datei eine hervorragende Möglichkeit, um Tastenanschläge zu reduzieren.Wenn Sie eine Zeile bearbeiten, die umbrochen wird, weil sie breiter als Ihr Puffer ist, können Sie mit gk und gj nach oben / unten wechseln.
Versuchen Sie, sich auf die effektive Verwendung der Bewegungsbefehle zu konzentrieren, bevor Sie schlechte Gewohnheiten lernen. Dinge wie 'dt' oder 'd3w' verwenden, anstatt xa ein paar Mal zu drücken. Grundsätzlich gibt es jedes Mal, wenn Sie dieselbe Taste wiederholt drücken, wahrscheinlich eine bessere / schnellere / präzisere Möglichkeit, dasselbe zu erreichen.
quelle
Die Sternchen-Taste *sucht nach dem Wort unter dem Cursor.
[+ Tabbringt Sie zur Definition einer C-Funktion, die sich unter Ihrem Cursor befindet. (Es funktioniert jedoch nicht immer.)
quelle
[ + Tab
wird immer funktionieren, wenn Sie diepath
mit erforderlichen Ordnern wieset path+=path/to/files
ZZ
(funktioniert wie:wq
)Und zur Cursorposition: Ich fand, dass ein Cursor, der immer in der Mitte des Bildschirms bleibt, cool ist -
quelle
:x
macht das auch:x
, bei dem die Datei nur bei Änderungen gespeichert wird, während:wq
die Datei immer gespeichert wird.Einige meiner neuesten Ergänzungen zu meinem Vim-Brainstore:
^wi
: Springen Sie zum Tag unter dem Cursor, indem Sie das Fenster teilen.cib/ciB
: Ändern Sie den Text in der aktuellen Klammer () bzw. in geschweiften Klammern {}.:set listchars=tab:>-,trail:_ list
: Tabulatoren / nachgestellte Leerzeichen anzeigen, die sich optisch von anderen Leerzeichen unterscheiden. Es hilft sehr bei der Python-Codierung.quelle
cib
ist toll.ci}
&cit
- wow gelernt , das wird sehr nützlich sein.vi[m]
beweist ein sehr aufregendes Programm!gv startet den visuellen Modus und wählt automatisch aus, was Sie zuvor ausgewählt haben.
quelle
: shell , um eine Shell-Konsole von Vim aus zu starten. Nützlich, wenn Sie beispielsweise ein Skript testen möchten, ohne Vim zu beenden. Drücken Sie einfach ^ d, wenn Sie mit der Shell-Konsole fertig sind, und kehren Sie dann zu Vim und Ihrer bearbeiteten Datei zurück.
quelle
:!sh
war zu schwer. Ich bevorzuge das, weil es einfacher ist, Befehlszeilen mit Registern / Vervollständigungen aus dem aktuellen Puffer zu%
%:h
map <Esc>! :shell<CR>
Ihre ein.vimrc
, und Sie können die Shell nur mit Alt +! Oder Alt + Shift + 1 starten. (Mnemonik::!{cmd}
wird{cmd}
mit der Muschel ausgeführt.):shell
startet jedoch eine neue verschachtelte Shell-Ebene. Währendctrl-z
nicht.Das macht mich immer munter:
quelle
vimcryption
vim -x Dateiname.txt
Sie werden nach einer Passphrase gefragt, diese bearbeitet und gespeichert. Wenn Sie die Datei in vi erneut öffnen, müssen Sie das Kennwort eingeben, um sie anzuzeigen.
quelle
set cryptmethod=blowfish
Sie jedoch, dass ein Algorithmus mit lächerlicher Stärke verwendet wird , sofern Sie nicht (nur in Version 7.3+ verfügbar). Siehehelp encryption
für weitere Details.:set cm=blowfish2
"Erstellen und debuggen Sie Ihren Code in Vim!
Aufbau
Nicht viel, wirklich. Sie benötigen eine
Makefile
im aktuellen Verzeichnis.Kompilieren
Geben Sie in Vim ein,
:make
um eine Shell aufzurufen und Ihr Programm zu erstellen. Machen Sie sich keine Sorgen, wenn die Ausgabe vorbeirollt. Drücken EnterSie einfach, wenn Sie fertig sind, um zu Vim zurückzukehren.Die Magie
Zurück in Vim stehen Ihnen folgende Befehle zur Verfügung:
:cl
listet die Fehler, Warnungen und anderen Meldungen auf.:cc
Zeigt die aktuelle Fehler- / Warnmeldung am unteren Bildschirmrand an und springt zur fehlerhaften Zeile in Ihrem Code.:cc n
springt zurn
th Nachricht.:cn
geht zur nächsten Nachricht über.:cp
springt zur vorherigen Nachricht.Da sind mehr; Wenn Sie interessiert sind, geben Sie
:help :cc
in Vim ein.quelle
^ P und ^ N.
Vervollständigen Sie den vorherigen (^ P) oder nächsten (^ N) Text.
^ O und ^ I.
Gehen Sie zum vorherigen (^ O - "O" für alten) Ort oder zum nächsten (^ I - "I" in der Nähe von "O").
Wenn Sie suchen, Dateien bearbeiten usw., können Sie durch diese "Sprünge" vorwärts und rückwärts navigieren.
Markierungen
Drücken Sie ma (m-Marke, a - Name der Marke). Geben Sie später `a ein , um zur Position zurückzukehren .
quelle
:help jump-motions
usw. in Ihre Antwort aufzunehmen, falls jemand weitere Informationen wünscht.Drücken Sie,
%
wenn sich der Cursor auf einem Anführungszeichen, einer Klammer, einer Klammer oder einer Klammer befindet, um die Übereinstimmung zu finden.quelle
Bis [Zeichen] (
t
). Es ist nützlich für jeden Befehl, der einen Bereich akzeptiert. Mein Favorit istct;
oderct)
löscht alles bis zum nachfolgenden Semikolon / schließenden Klammern und versetzt Sie dann in den Einfügemodus.Auch
G
undgg
sind nützlich (Gehe nach unten bzw. oben).quelle
f
stattdessent
, was durch diesen Charakter [Aktion] wird ; Wenn Sie beispielsweise den Cursor am Anfang eines Funktionsarguments haben,df,
wird dieser gelöscht (natürlich in geeigneten Sprachen).^r^w
um das Wort im Befehlsmodus unter den Cursor einzufügen.Dies ist sehr nützlich, wenn Sie grep- oder replace-Befehle verwenden.
quelle
Wenn Sie eine Zeilennummer gefolgt von
gg
eingeben, gelangen Sie zu dieser Zeile.quelle
<number>go
geht zum<number>
th Zeichen in der Datei.Ich wünschte, ich hätte früher grundlegende Dinge im visuellen Blockmodus gekannt. Selbst wenn Sie Vim für nichts anderes verwenden, kann es eine große Zeitersparnis sein, eine Datei in Vim nur für einige Blockoperationen zu öffnen. Ich bin mir ziemlich sicher, dass ich eine Menge Zeit damit verschwendet habe, solche Dinge manuell zu tun.
Beispiele, die ich besonders nützlich fand, wenn ich beispielsweise Listen symbolischer Konstantennamen konsistent umgestaltete:
Aktivieren Sie den Visual Block-Modus ( Ctrl+ Qfür mich unter Windows anstelle von Ctrl+ V)
Bewegen Sie den Cursor, um den gewünschten Block zu markieren.
Dann,
I whatever text
und drückt Escden Text vor dem Block auf jeder Zeile eingefügt zu haben.Verwenden Sie
A
stattI
, um den Text nach dem Block in jede Zeile einzufügen.Außerdem kann das einfache Umschalten des Falls einer visuellen Auswahl
~
eine große Zeitersparnis bedeuten.Und
d
natürlich auch einfach Spalten löschen .quelle
^ y kopiert das Zeichen über dem Cursor.
quelle
q <letter> - zeichnet ein Makro auf.
und
@ <same-letter> - spielt es ab.
Dies sind bei weitem die nützlichsten Befehle in Vim, da der Computer eine Menge Arbeit für Sie erledigen kann und Sie nicht einmal ein Programm oder etwas anderes schreiben müssen.
quelle
q
vereinfacht die Sache, aber Sie müssen sie nicht verwenden: Speichern Sie einfach den Pufferbefehl in einem benannten Puffer"
- zum Beispiel mit buffera
-"ad$
...q
zeichnet ein Makro auf; Makros können Befehle enthalten, nicht nur Text, sondern"ad$
unterscheiden sich vonqa
.qa
führt es nicht aus;qa
zeichnet es auf und@a
führt es aus. Es ist wahr, dass Sie ein Makro im Klartext schreiben, es im Registera
mit so etwas speichern"ad$
und dann mit ausführen können@a
, aber das ist einiges mehr Arbeit. Es gibt einen grundlegenden Unterschied zwischen Ausschneiden und Einfügen und Aufzeichnen und Ausführen.Öffnen mehrerer Dateien mithilfe von Registerkarten
Navigieren zwischen geöffneten Dateien
Speichern Sie die geöffnete Sitzung, damit Sie später zu Ihrer Liste der geöffneten Dateien zurückkehren können
Öffnen Sie eine erstellte Sitzung
Schließen Sie alle Dateien gleichzeitig
Ein weiterer Befehl, den ich kürzlich gelernt habe
Sie können damit einen Befehl für ein Ereignis ausführen, sodass Sie beispielsweise den Befehl make ausführen können, wenn Sie eine Datei mit folgenden Elementen speichern:
quelle
qx beginnt mit der Aufzeichnung von Tastenanschlägen. Sie können so ziemlich jede Bearbeitungsaufgabe erledigen, und Vim erinnert sich daran. Hit q wieder , wenn Sie fertig sind , und drücken Sie @x Ihre Tastatureingaben zu wiederholen. Dies ist ideal für sich wiederholende Änderungen, die zu komplex sind, um ein Mapping zu schreiben. Sie können viele Aufnahmen machen, indem Sie ein anderes Zeichen als x verwenden .
quelle
Ich muss sagen, dass einer meiner Favoriten das Hilfefenster in einen neuen Tab einfügt:
Dies öffnet Hilfe in einem neuen Tab und als jemand, der Vim-Tabs liebt, ist dies lächerlich nützlich.
quelle
cw
Wort ändern - löscht das Wort unter dem Cursor und versetzt Sie in den Einfügemodus, um ein neues einzugeben. Natürlich funktioniert dies mit anderen Bewegungstasten, so dass Sie Dinge wie c $ tun können , um zum Ende der Zeile zu wechseln.
f + Zeichen
Findet das nächste Vorkommen des Zeichens in der aktuellen Zeile. Sie können also vft ausführen , um den gesamten Text bis zum nächsten "t" in der aktuellen Zeile auszuwählen. Es ist eine weitere Bewegungstaste, daher funktioniert es auch mit anderen Befehlen.
quelle
:b [any portion of a buffer name]
Puffer wechseln. Wenn Sie also zwei Puffer haben, "somefile1.txt" und "someotherfile2.txt", können Sie mit einfach zum zweiten wechseln":b 2.t<enter>"
. Es unterstützt auch das Ausfüllen von Registerkarten, obwohl dies nicht erforderlich ist.Apropos Tab-Vervollständigung, die Einstellung
:set wildmode=full wildmenu
ist auch sehr hilfreich. Es ermöglicht die vollständige Vervollständigung der Registerkarten für den Befehlsmodus sowie ein sehr hilfreiches Menü im Fluchstil mit allen möglichen Übereinstimmungen, wenn es verwendet wird.quelle
:% s, / search, / replace,
Sie können andere Zeichen als
/
(Schrägstrich) verwenden, um Muster für die Ersetzung zu trennen. Auf diese Weise müssen Sie den Schrägstrichen der Dateipfade nicht entkommen.quelle
sed
hatte, aber nichtvim
. Je mehr Sie wissen ♒ ☆