Einfache Vim-Befehle, die Sie gerne früher gewusst hätten [geschlossen]

378

Ich lerne ständig neue Befehle in Vim, aber ich bin sicher, dass jeder ab und zu etwas Neues lernt. Ich habe erst kürzlich davon erfahren:

zz, zt, zb - Positionieren Sie den Cursor in der Mitte, oben oder unten auf dem Bildschirm

Welche anderen nützlichen oder eleganten Befehle hätten Sie gerne schon vor langer Zeit gelernt?

Lin
quelle
46
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.

yalestar
quelle
93
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.

Beispiel:

/blue\(\d\+\)
:%s//red\1/

Gleichwertig:

:%s/blue\(\d\+\)/red\1/

Sehen:

:help 'incsearch'
:help :substitute
DrAl
quelle
1
wow ... Ich habe nach so etwas gesucht
figurassa
1
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.
Brian Newman
quelle
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.

Cyber ​​Oliveira
quelle
29
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.

Peter Mortensen
quelle
23
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.

Brian Agnew
quelle
Wie deaktiviere ich den Scrollbind, nachdem ich ihn aktiviert habe?
Amjith
2
jinxed_coder : :set noscbzum Ausschalten und :set scbzum Einschalten (nicht :scrollbind). :h scrollbind
jmdeldin
Hoppla. Korrigiert für ': set scrollbind'.
Brian Agnew
7
^ 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.

Peter
quelle
16
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
  1. 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.

  2. 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.

  3. 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.

  4. 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.

Anthony
quelle
11
Verwenden Sie Escape nicht? Das ist Häresie. Escape ist dein bester Freund, sowohl beruflich als auch beruflich.
Xcramps
28
Wenn es so ein guter Freund ist, warum ist es dann so weit weg auf der Tastatur?
Anthony
weil 99% der Leute es nie benutzen.
Stefano Borini
5
Escape ist auf meiner Tastatur um einige Zentimeter von anderen Tasten getrennt. Du kannst es nicht verfehlen.
Brian Carper
15
# 3 ist großartig! Ich lerne immer noch neue Dinge ...
Brian Newman
45

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.)

smcameron
quelle
1
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
Funkodebat
github.com/bronson/vim-visual-star-search ermöglicht die Sternsuche nach visueller Auswahl. Ich will es nicht mehr missen.
Patrick Oscity
[ + Tab wird immer funktionieren, wenn Sie die pathmit erforderlichen Ordnern wieset path+=path/to/files
dlmeetei
43

ZZ(funktioniert wie :wq)

Und zur Cursorposition: Ich fand, dass ein Cursor, der immer in der Mitte des Bildschirms bleibt, cool ist -

set scrolloff=9999
Maykeye
quelle
2
Wusste das nicht. :xmacht das auch
sa125
18
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.
Walter
quelle
4
Das braucht mehr Stimmen! cibist toll.
Matt Parker
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.

zu viel PHP
quelle
34

: 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.

peroumal1
quelle
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.
wisbucky
32

Das macht mich immer munter:

:help 42
Dogbane
quelle
31

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.

Anteatersa
quelle
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
rodrigoq
2
dgl.cx/2014/10/vim-blowfish meta-tldr: "aus Gründen der Abwärtskompatibilität in Vim 7.4.399 [ groups.google.com/forum/#!msg/vim_dev/D8FyRd0EwlE/bkBOo-hzTzoJ] behoben Um eine neue Kryptomethode zu sein, verwenden Sie :set cm=blowfish2"
underscore_d
28

Erstellen und debuggen Sie Ihren Code in Vim!

Aufbau

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:

  1. :cl listet die Fehler, Warnungen und anderen Meldungen auf.
  2. :ccZeigt die aktuelle Fehler- / Warnmeldung am unteren Bildschirmrand an und springt zur fehlerhaften Zeile in Ihrem Code.
  3. :cc nspringt zur nth Nachricht.
  4. :cn geht zur nächsten Nachricht über.
  5. :cp springt zur vorherigen Nachricht.

Da sind mehr; Wenn Sie interessiert sind, geben Sie :help :ccin Vim ein.

Adam Liss
quelle
1
funktioniert mit mehr als nur dem Kompilieren von Code. Jede Aufgabe, die in ein Makefile geschrieben wird, ist dafür eine großartige Verwendung.
Dwight Spencer
25

^ 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 .

dimba
quelle
1
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.

Adam Liss
quelle
20
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).

MighMoS
quelle
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.

Peter Mortensen
quelle
Wenn es das einzige Wort ist, das Sie möchten, sucht * im normalen Modus nach dem Wort unter dem Cursor.
idbrii
17

Wenn Sie eine Zeilennummer gefolgt von ggeingeben, gelangen Sie zu dieser Zeile.

Xastor
quelle
31
: 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 dnatürlich auch einfach Spalten löschen .

Anon
quelle
15

^ y kopiert das Zeichen über dem Cursor.

innaM
quelle
6
... 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.

leeand00
quelle
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:

:autocmd BufWritePost *.cpp :make
Mansuro
quelle
12

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 .

zu viel php
quelle
5
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.

Robert Massaioli
quelle
2
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.

Adam Neal
quelle
9

: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.

Michael
quelle
9

:% 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.

hfs
quelle
2
Oh, verdammt ja. Ich wusste, dass ich das sedhatte, aber nicht vim. Je mehr Sie wissen ♒ ☆
Beerbajay