Vi vs vim, oder gibt es einen Grund, warum ich vi jemals benutzen möchte?

84

Ich kenne mich mit * NIX-Texteditoren (die derzeit von nanonach migrieren) aus vimund habe nach einigem Hin und Her in Unix & Linux SE festgestellt, dass vibei einer ganzen Reihe von Fragen anstelle von 'vim' verwendet wird. Ich weiß, dass 'vim' für 'Vi IMproved' steht und frage mich deshalb, warum jemand lieber vi anstelle von vim verwenden möchte. Hat vi einen signifikanten Vorteil gegenüber vim?

Edit: Ich denke, dass meine Frage falsch interpretiert wird. Ich weiß, dass vim zum größten Teil wesentlich leistungsfähiger und funktionsreicher ist als vi. Was ich wissen möchte, ist, ob es mögliche Fälle gibt, in denen vi einen Vorteil gegenüber vim hat, z. B. weniger Speicherbedarf, Verbreitung auf * nix-Systemen usw.

vier
quelle
25
Das Schöne daran viist, dass es auf jedem POSIX-kompatiblen System zu erwarten ist.
Jordan
1
Eigentlich enthält Ubuntu Standardinstallation viund nicht vim.. Ubuntu ist eine der benutzerfreundlichsten Distribution btw ;-)
Amyassin
10
@amyassin Dies ist falsch, Ubuntu, wie die meisten Linux-Distributionen, enthält vim. viist nur ein symbolischer Link, auf den vimin der Standardinstallation möglicherweise verwiesen wird.
Juli
2
Mein Rat ist: Verwenden Sie Vim, aber lernen Sie vidie POSIX-Spezifikationen fürvi . Auf diese Weise haben Sie sowohl portables Wissen als auch Kenntnisse über Vim-Erweiterungen.
Wildcard
1
@ DDK Du hast "irgendwann" in meiner Aussage verpasst. "ls -l / etc / alternatives / vi" -> "lrwxrwxrwx 1 root root 17. Januar 2016 / etc / alternatives / vi -> /usr/bin/vim.tiny"
jlliagre

Antworten:

61

viist (auch) ein POSIX-Standardeditor . Es gibt viele Implementierungen und diese vimsind zumindest unter Linux wahrscheinlich am beliebtesten.

Während viele traditionelle Unix-kompatible Betriebssysteme viImplementierungen bieten , die dem Standard sehr nahe kommen, wurden vimviele zusätzliche Funktionen hinzugefügt, die es zu einem zweischneidigen Schwert machen.

Natürlich wurden diese Erweiterungen in der Regel entwickelt, um den Bearbeitungsprozess zu vereinfachen und nützliche Features und Funktionen bereitzustellen. Wenn Sie jedoch an einige von ihnen gewöhnt sind (nicht an kosmetische wie Syntaxfarben, sondern an solche, die das Verhalten des Editors verändern), können Sie leicht vergessen, dass sie spezifisch sind. Die Verwendung einer anderen Implementierung, einschließlich der auf dem ursprünglichen BSD-Code basierenden, kann sehr frustrierend sein. Das Gegenteil ist auch der Fall.

Dies ähnelt dem Problem, das bei Skripten mit Nicht-POSIX-Bashismen auftritt, wenn orthodoxere Shell-Implementierungen wie dashoder verwendet werden ksh.

jlliagre
quelle
29

Kein vi hat keinen nennenswerten Vorteil gegenüber vim, sondern ist umgekehrt. Vim hat mehr Vorteile als Vi. Sie könnten interessiert sein an: Warum, oh WARUM, diese #? @! Nutheads verwenden vi?

Lesen Sie auch: Lohnt es sich, VIM zu lernen?

abhixec
quelle
4
Ja. Ich verwende keine IDE, weil die Editoren, zu deren Verwendung sie Sie zwingen, einfach nicht Vim sind.
Keith
1
@Keith Ich verwende sowohl Xcode als auch Eclipse und kann immer noch nur mit vi bearbeiten.
ott--
@Keith SlickEdit hat eine großartige Vim-Emulation, und IDEAs kommt dem schon sehr nahe. Außerdem verfügt Visual Studio über ViEmu.
Demonkoryu
1
IntellIJ hat auch ein nettes Vim-Plugin, das das Verhalten des Standard-Editors überschreibt.
26.
24

Nachdem ich einen großen Teil meines Lebens (ohne Kindheit) damit verbracht hatte, bequem mit Vim zu arbeiten, verbrachte ich ungefähr einen Monat damit, nur vi zu verwenden. Dabei wurde mir klar, dass ich für alle meine Textänderungsbedürfnisse auf Vim angewiesen war. Vor meiner Reise mit vi habe ich immer dann, wenn ich Text ersetzen oder eine ähnliche Operation in einer großen Gruppe von Dateien ausführen musste, die Dateien in Vim geöffnet und einen :bufdoBefehl ausgeführt, und wenn ich einige Dateien einrücken oder formatieren musste, Ich würde sie in Vim öffnen und Vims =und gwBefehle verwenden. Ich war Vim-abhängig. Nachdem mir klar wurde, dass vi diese Befehle nicht hatte, musste ich mit Bulk-Text-Transformationen arbeiten sedund lernte viel über andere Programme wie awkundindent. Obwohl ich am Ende wieder zu Vim zurückgekehrt bin, war das Wissen, das ich durch die Verwendung eines weniger gut ausgestatteten Editors gewonnen habe, umfangreich und hat sich als äußerst nützlich erwiesen. Neben dem Erlernen von Werkzeugen außerhalb eines Texteditors lernte ich auch vi besser kennen. Wenn ich an einem neuen System oder einem Server ohne Vim arbeite, fühle ich mich mit vi viel wohler als vor meinem einmonatigen Ausflug.

Außerdem habe ich im letzten Monat Linux auf einem billigen WM8650-Tablet installiert und festgestellt, dass es einen merklichen Leistungsunterschied zwischen Vim und vi gibt. Ich verwende daher normalerweise vi auf dem Tablet.


quelle
3
Ich finde, dass dies ein häufiges Problem in der IT ist - die Tools, die uns helfen, können auch Dinge verdecken, die wir besser lernen können.
danno
Tatsächlich kann die Bearbeitung von In-Place-Dateien für viele Dateien auch nicht mit Awk oder Sed durchgeführt werden . (Der -iSchalter auf beiden ist eine GNU-Erweiterung.) Aber Sie können sie portabel mit etwas wiefor f in *; do printf '%s\n' '%!sed -e '\''some sed command'\' x | ex "$f"; done
Wildcard
12

Ich würde es schwer haben, ohne vim zu leben, aber ich kann vi nicht ausstehen . Wenn Sie jedoch das erstere lernen, werden Sie zumindest eine Vorstellung davon haben, wie Sie mit dem späteren umgehen sollen, wenn das alles ist, was verfügbar ist.

Die vim-Oberfläche ist eigentlich ziemlich nah an vi. Wenn ich mit vim an einem System arbeite, füge ich als Erstes Folgendes hinzu ~/.vimrc:

syntax enable
set nocp
set wildmenu

Es gibt eine Menge anderer Dinge, die ich bevorzuge - Nowrap und Nummerierung, usw. - aber egal. "syntax enable" aktiviert nur die grundlegende Syntaxhervorhebung (etwas kräftiger: filetype plugin onist auch von grundlegender Bedeutung); "nocp" deaktiviert die vi-Kompatibilität und es ist dies, das beginnt, vim von ye olde vi zu unterscheiden (z. B. ermöglicht es showmode, dass die gesamte Erfahrung etwas menschlicher wird, da Sie jetzt eine Ahnung haben, ob Sie das Kommando haben oder ~ INSERT ~ Modus). "wildmenu" gibt Ihnen nur ein horizontales Abschlussmenü, wenn Sie einige Dinge tun, was das Leben auch einfacher macht.

Die Textbearbeitungsfunktionen von vim sind unübertroffen - abgesehen von Emacs habe ich noch nie eine Software gesehen oder gehört, die in die Nähe kommt. Sie sind nicht leicht zu erlernen, aber sobald Sie sie kennen, sind sie viel schneller als Mausmenüs und viel dynamischer als die einfachen Tastenmakroalternativen in auf Mausmenüs basierenden Benutzeroberflächen. Zum Programmieren benutze ich manchmal vim neben einer IDE wie Eclipse, aber ich mache die meiste Arbeit in vim.

Wenn Sie diesen Weg einschlagen, schauen Sie sich die Plugins für die automatische Vervollständigung und die Tagliste an. Und hüte dich vor der dunklen Seite.

Goldlöckchen
quelle
Ich füge immer auch hinzu set mouse=a.
ott--
In Bezug auf Ihren Programmierkommentar finden Sie eclim möglicherweise interessant ...
ire_and_curses
@ire_and_curses: habe es nicht ausprobiert. Eclipse und vim überwachen beide die Quelldateien und ermöglichen deren externe Aktualisierung. Das Umblättern von einem Desktop auf einen anderen ist das Umblättern von einem Desktop auf einen anderen. Scheint so ziemlich die Idee zu sein.
Goldlöckchen
Obwohl ich nicht der Meinung bin, dass diese Antwort die gewählte Antwort sein sollte (da sie voreingenommen ist), ist genau die Art der Perspektive hilfreich, um die Unterschiede zu verstehen. Danke, dass Sie Stellung bezogen haben.
Genorama
8

Der Vorteil ist, dass vi normalerweise unter Enterprise UNIX wie AIX oder Solaris vorinstalliert ist. Außerdem ist vim auf Installationsmedien nicht verfügbar.

dchirikov
quelle
1

Mir ist aufgefallen, dass ich nur dann eine Auswahl Vivornehme, VIMwenn ich ein Textdokument oder eine Konfigurationsdatei kopiere und einfüge, für die ich den catBefehl verwendet habe. Dies liegt daran , wenn ich versuche, ctrl-cund dann ctrl-vin das VIMgeöffnete Dokument, zwingt sie alle Zeilen einen Kommentar infront von ihnen zu haben. Also , wenn ich Viauf ctrl-voder pastein das Vigeöffnete Dokument, es fügt genau das, was ich von kopiert. Ansonsten nutze ich den VIMganzen Tag.

Genießen!

Tony-Caffe
quelle
5
Versuchen Sie:set paste
Patrick
3
setze pastetoggle = <F2> in .vimrc ( vim.wikia.com/wiki/Toggle_auto-indenting_for_code_paste )
Dave
1

Wie bereits in früheren Antworten erwähnt, wird vi mit nahezu jedem UNIX-System ausgeliefert.

Ich wollte nur ein Beispiel hinzufügen. Arch Linux ist eine besonders beliebte und leichtgewichtige Distribution, die weder vom Installer noch von der Basis-Distribution standardmäßig mit vim ausgeliefert wird, jedoch beide mit vi.

Dies ist per se kein Vorteil für vi , da Sie vim einfach manuell installieren können und bei der Installation, für die ein Texteditor erforderlich ist, nur wenig zu tun ist. Aber den Unterschied zu verstehen und dass vi allgegenwärtiger und leichter ist als vim, bringt ihm einige Nischenvorteile.

Nur um umfassend zu sein, hat noch niemand explizit darauf hingewiesen, dass vi ein direkter Vorläufer von vim ist. Vim sollte genau das sein, was vi war, und mehr.

Auf sehr direkte Weise ist vim vi überlegen, weil es so konzipiert wurde .

StatGenGeek
quelle
1

Der einzige Grund, vi über vim zu verwenden, ist, wenn Sie keine andere Wahl haben.

Es gibt viele, viele Gründe, warum vim für "vi enhanced" steht!

Ausgeliehen von einem ähnlichen Beitrag, auf den ich geantwortet habe: -

  1. Mehrere Fenster - horizontal, vertikal und Registerkarten.
  2. Visuelle Hervorhebung.
  3. Online-Hilfe über den Befehl: help.
  4. Zeichnen Sie Makros in ein Register auf, das Sie dann ausführen können.
  5. Machen Sie mehrmals rückgängig (und wiederholen Sie sie), anstatt das irrsinnige Rückgängig-Umschalten des alten VIs.
  6. Befehlszeilenverlauf, Suchverlauf.
  7. Eine ganze Sprache eingebettet zusammen mit einer Vielzahl von verfügbaren Funktionen, zB getcwd ()
  8. Sehr erweiterte Mustererkennung.
  9. Wortvervollständigung über Strg-P ​​& Strg-N.
  10. Ein eingebauter Datei-Navigator (etwas umständlich, kann aber nützlich sein).
  11. Die ESC-Taste beendet tatsächlich Befehle, die Sie versucht haben, um zu entkommen, anstatt sie (wahnsinnig) wie vi auszuführen.
  12. Möglichkeit, Befehle über bufdo, argdo & windo auf allen Puffern, Args oder Fenstern auszuführen.
Paul T
quelle
Sie hätten wahrscheinlich die "vielen, vielen" Gründe herüberbringen können, die Sie in der Antwort von unix.stackexchange.com/a/425597/85039 hier angesprochen haben. Das würde diese Antwort ein bisschen besser machen; ansonsten liest es sich eher wie ein Kommentar als eine tatsächliche Antwort
Sergiy Kolodyazhnyy
Punkt genommen. Die Antwort wurde aktualisiert und stammt aus einer verwandten Antwort, die ich gestern gemacht habe.
Paul T
1

Dies ist ein Auszug aus Vim Koans :

Master Wq und der Unix-Master

Ein alter Unix-Meister kam zu Meister Wq. „Ich bin besorgt, Wq. Du lehrst den Weg von Vim. vi ist heilig, Vim jedoch nicht; sein Code breitet sich aus, seine Merkmale drängen sich in das Gedächtnis; Seine Binärdateien sind riesig, sein Verhalten inkonsistent. Dies ist nicht der Weg von Unix. Ich fürchte, Sie führen Ihre Schüler in die Irre. Was kann getan werden? "

Meister Wq nickte. "Du hast recht", sagte er. „Vim ist kaputt. Lass es uns reparieren. Sollen wir anfangen?"

Der alte Unix-Meister stimmte zu und öffnete eine Shell. Er tippte:

$ vi vim.c

Er fing an zu programmieren. Master Wq schaute eine Weile zu und fragte ihn dann: „Welche Implementierung von vi verwenden Sie? Nvi? Vim? Elvis? "

"Ich weiß nicht", sagte der Unix-Meister. "Es ist egal."

Meister Wq nickte. Der Unix-Meister saß einen Moment fassungslos da und schloss sein Dokument ungespeichert.

modlin
quelle