1124 Stimmen

Was ist Ihre produktivste Abkürzung mit Vim?

Ich habe schon viel gehört über Vim sowohl Vor- als auch Nachteile. Es scheint wirklich, dass man (als Entwickler) mit Vim schneller sein sollte als mit jedem anderen Editor. Ich benutze Vim, um einige grundlegende Dinge zu tun und ich bin bestenfalls 10 mal weniger produktiv mit Vim.

Die einzigen zwei Dinge, die Ihnen wichtig sein sollten, wenn Sie über Geschwindigkeit sprechen (vielleicht sind sie Ihnen nicht wichtig genug, aber das sollten Sie), sind:

  1. Abwechselnd links und rechts verwenden Händen ist die schnellste Weg zur Verwendung des k
  2. Niemals die Maus zu berühren ist die zweite Möglichkeit, so schnell wie möglich zu sein. Es dauert ewig, bis Sie Ihre Hand bewegen können, die Maus zu greifen, sie zu bewegen und sie wieder auf die Tastatur zu bringen (und man muss oft auf die Tastatur schauen, um sicher zu sein, dass Sie um sicher zu sein, dass man die Hand wieder an der richtigen Stelle hat)

Hier sind zwei Beispiele, die zeigen, warum ich mit Vim weit weniger produktiv bin.

Kopieren/Ausschneiden & Einfügen. Ich mache das ständig. Mit all den zeitgenössischen Redakteuren, die Sie drücken Shift mit der linken Hand, und Sie bewegen den Cursor mit der rechten Hand, um Text auszuwählen. Dann Ctrl + C Kopien, bewegen Sie den Cursor und Ctrl + V Pasten.

Mit Vim ist es furchtbar:

  • yy um eine Zeile zu kopieren (Sie wollen fast nie die ganze Zeile!)
  • [number xx]yy zum Kopieren xx Zeilen in den Puffer. Aber man weiß nie genau, ob man das ausgewählt hat, was man wollte. Ich muss oft [number xx]dd dann u rückgängig zu machen!

Ein weiteres Beispiel? Suchen und Ersetzen.

  • Sur PSPad : Ctrl + f geben Sie ein, wonach Sie suchen möchten, und drücken Sie dann Enter .
  • In Vim: / ein, dann geben Sie ein, wonach Sie suchen möchten, und wenn es Sonderzeichen gibt, geben Sie \ vor jede Sonderzeichen, dann drücken Sie Enter .

Und alles mit Vim ist so: es scheint, dass ich nicht weiß, wie ich es richtig handhaben soll.

NB : Ich habe bereits den Vim gelesen schummeln Blatt :)

Meine Frage ist:

Was ist die Art und Weise, wie Sie Vim benutzen, die Sie produktiver macht als mit einem modernen Editor?

34voto

agfe2 Punkte 442

Sitzung

a. Sitzung speichern

:mks Sitzungsname

b. Speichern der Sitzung erzwingen

:mks! Sitzungsname

c. Sitzung laden

gvim oder vim -S Sitzungsname


Addieren und Subtrahieren

a. Addieren und Subtrahieren

CTRL-A ;Fügt [count] zu der Zahl oder dem Buchstaben an oder nach dem Cursor. {nicht in Vi

CTRL-X ;Subtrahiere [count] von der Zahl oder dem Buchstaben Zeichen am oder nach dem Cursor. {nicht in Vi}

b. Aufhebung der Zuordnung von Fenstertasten

Im Fenster, Ctrl-A ist bereits für die gesamte Dateiauswahl zugeordnet, die Sie in der rc-Datei aufheben müssen. mswin.vim CTRL-A-Zuordnung als Kommentar markieren oder fügen Sie Ihre rc-Datei mit unmap hinzu

c. Mit Makro

Der Befehl CTRL-A ist in einem Makro sehr nützlich. Beispiel: Verwenden Sie die folgenden Schritte, um eine nummerierte Liste zu erstellen.

  1. Erstellen Sie den ersten Listeneintrag und achten Sie darauf, dass er mit einer Zahl beginnt.
  2. qa - Beginn der Aufzeichnung in Puffer 'a'
  3. Y - den Eintrag löschen
  4. p - eine Kopie des Eintrags unterhalb des ersten Eintrags einfügen
  5. CTRL-A - die Zahl erhöhen
  6. q - Aufnahme beenden
  7. @a - Wiederholen Sie die Schritte yank, put und increment

32voto

Dave Kirby Punkte 24272

Letzte Woche hat unser Projekt bei der Arbeit eine Menge Python-Code von einem anderen Projekt geerbt. Leider passte der Code nicht in unsere bestehende Architektur - er wurde mit globalen Variablen und Funktionen erstellt, die in einer Multithreading-Umgebung nicht funktionieren würden.

Wir hatten ~80 Dateien, die überarbeitet werden mussten, um objektorientiert zu sein - alle Funktionen wurden in Klassen verschoben, Parameter geändert, Importanweisungen hinzugefügt usw. Wir hatten eine Liste von etwa 20 Arten von Korrekturen, die an jeder Datei vorgenommen werden mussten. Ich würde schätzen, dass eine Person bei manueller Arbeit vielleicht 2-4 pro Tag schaffen könnte.

Also habe ich die erste von Hand gemacht und dann ein Vim-Skript geschrieben, um die Änderungen zu automatisieren. Das meiste davon war eine Liste von Vim-Befehlen, z.B.

" delete an un-needed function "
g/someFunction(/ d

" add wibble parameter to function foo "
%s/foo(/foo( wibble,/

" convert all function calls bar(thing) into method calls thing.bar() "
g/bar(/ normal nmaf(ldi(`aPa.

Der letzte Punkt verdient eine kleine Erklärung:

g/bar(/  executes the following command on every line that contains "bar("
normal   execute the following text as if it was typed in in normal mode
n        goes to the next match of "bar(" (since the :g command leaves the cursor position at the start of the line)
ma       saves the cursor position in mark a
f(       moves forward to the next opening bracket
l        moves right one character, so the cursor is now inside the brackets
di(      delete all the text inside the brackets
`a       go back to the position saved as mark a (i.e. the first character of "bar")
P        paste the deleted text before the current cursor position
a.       go into insert mode and add a "." 

Für einige komplexere Transformationen, wie z.B. die Erzeugung aller Import-Anweisungen, habe ich etwas Python in das Vim-Skript eingebettet.

Nach ein paar Stunden Arbeit hatte ich ein Skript, das mindestens 95 % der Konvertierung übernimmt. Ich öffne einfach eine Datei in vim und führe dann :source fixit.vim und die Datei wird im Handumdrehen umgewandelt.

Wir müssen noch die verbleibenden 5 % ändern, die es nicht wert waren, automatisiert zu werden, und die Ergebnisse testen, aber ich schätze, dass wir durch das Schreiben dieses Skripts an einem Tag Wochen an Arbeit gespart haben.

Natürlich wäre es möglich gewesen, dies mit einer Skriptsprache wie Python oder Ruby zu automatisieren, aber es hätte viel mehr Zeit in Anspruch genommen und wäre weniger flexibel gewesen - das letzte Beispiel wäre schwierig gewesen, da Regex allein nicht in der Lage wäre, verschachtelte Klammern zu behandeln, z. B. um die bar(foo(xxx)) a foo(xxx).bar() . Vim war perfekt für diese Aufgabe.

28voto

soulmerge Punkte 70900

Verwenden Sie den eingebauten Datei-Explorer! Der Befehl lautet :Explore und ermöglicht es Ihnen, sehr schnell durch Ihren Quellcode zu navigieren. Ich habe diese Zuordnungen in meinem .vimrc :

map <silent> <F8>   :Explore<CR>
map <silent> <S-F8> :sp +Explore<CR>

Mit dem Explorer können Sie auch Dateiveränderungen vornehmen. Ich werde einige meiner Lieblingstasten veröffentlichen, indem ich <F1> finden Sie die vollständige Liste:

  • - : Das Nützlichste: Wechsel in das obere Verzeichnis ( cd .. )
  • mf : Eine Datei markieren
  • D : Löschen Sie markierte Dateien oder die Datei, auf der sich der Cursor befindet, wenn nichts markiert ist.
  • R : Umbenennen der Datei, auf der sich der Cursor befindet.
  • d : Ein neues Verzeichnis im aktuellen Verzeichnis erstellen
  • % : Erstellen einer neuen Datei im aktuellen Verzeichnis

25voto

Jeff Dege Punkte 10400

Ich bin Mitglied der American Cryptogram Association. Die zweimonatlich erscheinende Zeitschrift enthält über 100 Kryptogramme verschiedener Art. Etwa 15 davon sind "Kryptarithmen" - verschiedene Arten von arithmetischen Problemen, bei denen die Ziffern durch Buchstaben ersetzt werden. Zwei oder drei davon sind Sudokus, allerdings mit Buchstaben anstelle von Zahlen. Wenn das Gitter vervollständigt ist, ergeben die neun verschiedenen Buchstaben ein Wort oder mehrere Wörter auf einer Linie, Diagonale, Spirale usw. irgendwo im Gitter.

Anstatt mit dem Bleistift zu arbeiten oder die Aufgaben von Hand einzutippen, lade ich die Aufgaben aus dem Mitgliederbereich der Website herunter.

Wenn ich mit diesen Sudokus arbeite, verwende ich vi, einfach weil ich die Möglichkeiten von vi nutze, die nur wenige andere Editoren haben. Vor allem bei der Umwandlung des Buchstabenrasters in ein nummeriertes Raster, weil ich es einfacher finde, es zu lösen, und dann das fertige nummerierte Raster zurück in das Buchstabenraster, um das Lösungswort oder die Lösungswörter zu finden.

Die Aufgabe besteht aus neun Gruppen von neun Buchstaben, mit - s, die die Leerzeichen darstellen, in zwei Zeilen geschrieben. Der erste Schritt besteht darin, diese in neun Zeilen mit je neun Zeichen zu formatieren. Das ist nichts Besonderes, es werden lediglich acht Zeilenumbrüche an den entsprechenden Stellen eingefügt.

Das Ergebnis sieht dann so aus:

T-O-----C
-E-----S-
--AT--N-L
---NASO--
---E-T---
--SPCL---
E-T--OS--
-A-----P-
S-----C-T

Der erste Schritt bei der Umwandlung in Zahlen besteht also darin, eine Liste mit den einzelnen Buchstaben zu erstellen. Zuerst mache ich eine Kopie des Blocks. Ich setze den Cursor an den Anfang des Blocks und gebe dann ein :y}}p . : versetzt mich in den Kommandomodus, y gibt den nächsten Bewegungsbefehl aus. Da } ist eine Verschiebung an das Ende des nächsten Absatzes, y} reißt den Absatz heraus. } bewegt dann den Cursor an das Ende des Absatzes, und p fügt ein, was wir kurz nach dem Cursor gelöscht hatten. Also y}}p erstellt eine Kopie des nächsten Absatzes und der Cursor befindet sich zwischen den beiden Kopien.

Als Nächstes verwandle ich eine dieser Kopien in eine Liste mit einzelnen Buchstaben. Dieser Befehl ist ein wenig komplexer:

:!}tr -cd A-Z | sed 's/\(.\)/\1\n/g' | sort -u | tr -d '\n'

: versetzt mich wieder in den Kommandomodus. ! gibt an, dass der Inhalt des nächsten yank über eine Kommandozeile weitergeleitet werden soll. } löscht den nächsten Absatz, und die Befehlszeile verwendet dann die tr um alles außer Großbuchstaben zu entfernen, wird der Befehl sed um jeden Buchstaben in einer einzigen Zeile zu drucken, und der Befehl sort um diese Zeilen zu sortieren und Duplikate zu entfernen, und dann tr entfernt die Zeilenumbrüche, so dass die neun einzelnen Buchstaben in einer einzigen Zeile stehen und die neun Zeilen ersetzen, aus denen der Absatz ursprünglich bestand. In diesem Fall lauten die Buchstaben: ACELNOPST .

Der nächste Schritt besteht darin, eine weitere Kopie des Gitters zu erstellen. Und dann verwenden Sie die Buchstaben, die ich gerade identifiziert habe, um jeden dieser Buchstaben durch eine Ziffer von 1 bis 9 zu ersetzen. Das ist ganz einfach: :!}tr ACELNOPST 0-9 . Das Ergebnis ist:

8-5-----1
-2-----7-
--08--4-3
---4075--
---2-8---
--7613---
2-8--57--
-0-----6-
7-----1-8

Dieses kann dann auf die übliche Weise gelöst oder in einen beliebigen Sudoku-Löser eingegeben werden. Die fertige Lösung kann dann wieder in Buchstaben umgewandelt werden mit :!}tr 1-9 ACELNOPST .

In vi steckt eine Kraft, die nur von wenigen anderen erreicht wird. Das größte Problem ist, dass nur sehr wenige der vi-Tutorial-Bücher, Websites, Hilfedateien usw. mehr als nur die Oberfläche dessen, was möglich ist, berühren.

23voto

jqno Punkte 14613

Massenhafte Textmanipulationen!

Entweder durch Makros:

  • Beginnen Sie mit der Aufnahme: qq
  • Dinge tun
  • Aufnahme beenden: q
  • Wiederholen Sie das: @q (das erste Mal), @@ danach.
  • Wiederholen Sie dies 20 Mal: 20@@

Oder durch reguläre Ausdrücke:

  • Ersetzen Sie Dinge: :%s/[fo]+/bar/g

(Aber seien Sie gewarnt: Wenn Sie Letzteres tun, werden Sie 2 Probleme haben :)).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X