• Diese Seite verwendet Cookies. Indem du diese Website weiterhin nutzt, erklärst du dich mit der Verwendung von Cookies einverstanden. Erfahre mehr

vi, wie mehrere Zeilen markieren und in Buffer kopieren

Themenstarter #1
Hallo,

unter FreeBSD12-2-Stable, der vorinstallierte vi, (Version 2.1.3 (2015-04-08) The CSRG, University of California, Berkeley.). wie kann man denn dort mehrere Zeilen markieren und in einen Buffer kopieren? Unter vim kenne ich das normaler weise so das ich zu der Stelle im Text mit dem Cursor navigiere, wo man mit dem Markieren beginnt, dazu einfach die Taste "v" drücken (im Visuellen Modus) um das markieren zu starten, danach dann mit dem Cursor bis zu der Textstelle hin navigieren, bis wohin der Text markiert werden soll. Wenn der Text markiert ist kann dann problemlos der markierte Text in ein Buffer kopiert werden...unter vim wohlbemerkt!
Allerdings funktioniert so das markieren nicht unter dem vorinstallierten vi. Den yank (Taste=y/Y) Befehl um von Zeile X bis Zeile Y zu yanken ist unpraktisch, aka 5yy oder yyyyy, da ich manchmal mehrere Zeilen markieren möchte wo ich nicht weiss wo ZeilenNummerStart ist, geschweige denn ZeilenNummerEnde für die Zeilen die ich gerne in den Buffer kopieren möchte. Wie funktioniert das denn unter vi mit dem markieren ?
 

datasmurf

Happy FreeBSD User
#2
Hi,

vi starten dann

Bash:
:set nu
Um Zeilenummern anzuzeigen

Bash:
1,5#
Dann wird dir der "Ausschnitt" Zeile 1 - 5 angezeigt und du kannst via

Bash:
1,5y
die Zeilen kopieren.

vi's Startdatei lautet $HOME/.nexrc und könnten so aussehen.

Code:
set nu
set sm
set ts=4
set verbose
set showmode
Hier habe ich mal ein Beispiel erstellt. asciinema

Ich bin aber kein vi Poweruser.
 

pit234a

Well-Known Member
#3
Mein Senf dazu ist nicht besonders hilfreich, denn, anstatt mich jemals an vi zu gewöhnen und wenigstens die Grundfunktonionen zu erlernen, habe ich "Zeit Lebens" immer versucht, ihn möglichst zu umgehen und das ist mir auch weitgehend gelungen.
Also, nur deshalb, weil vi in FreeBSD der Default-Editor ist, muss man den nicht unbedingt benutzen.
Es gibt viele gute Gründe dafür, es doch zu tun, aber für mich war immer ausschlaggebend, dass ich nicht für die gaanz gaanz wenigen Einsätze, wo ich den vi wirklich mal brauchte (weil eine SW das so verlangt, etwa vipw), diesen erlernen wollte. Hätte ich eh alles wieder vergessen, wenn ich ihn eben nicht ständig benutze.

Vielleicht ist das eine Frage, die du dir auch stellen solltest.
Willst du wirklich vi lernen und benutzen? Dann Gut.
Willst du es nur deshalb, weil FreeBSD ihn per Default anbietet? Dann muss das nicht sein und wenn du dich in vim wohler fühlst, dann benutze doch den.

Nebenbei liefert FreeBSD nicht nur vi aus, sondern enthält auch ee und ich denke, das hat womöglich schon einen Grund. Bei weitem nicht alle FreeBSD-Nutzer wollen immer alles mit vi erledigen.
 

Rakor

Administrator
Mitarbeiter
#4
Kannst aber auch einfach die Zeilen in visual Modus markierten (im normal Modus V drücken, dahin navigieren wo du willst) und mit y yanken.

Geschmackssache.
 

Andy_m4

Well-Known Member
#5
wo ich den vi wirklich mal brauchte (weil eine SW das so verlangt, etwa vipw)
Selbst da ist er nicht unbedingt vonnöten. Viele dieser Tools respektieren nämlich die Umgebungsvariable EDITOR.
(siehe dazu auch das Handbuch: https://www.freebsd.org/doc/de/books/handbook/shells.html#shell-env-vars )
Wenn Du also
env EDITOR=ee vipw
machst, dann wird als Editor der ee statt vi benutzt.
Selbstredend kannst Du EDITOR auch irgendwo zentral setzen damit sie standardmäßig auf Deinen Wunscheditor konfiguriert ist.
 

pit234a

Well-Known Member
#6
Selbstredend kannst Du EDITOR auch irgendwo zentral setzen damit sie standardmäßig auf Deinen Wunscheditor konfiguriert ist.
das irgendwo scheint hier der Punkt zu sein, denn eigentlich habe ich das zB in meiner /etc/csh.cshrc schon global gesetzt. Aus irgendeinem Grund hatte ich dann letztens den Fall (und bitte: ich kann es nicht mehr nachvollziehen, wieso das so war), dass in der /root/.cshrc doch noch der vi gesetzt war und die lokalen Einstellungen überschreiben ja die globalen Einstellungen und...
Natürlich einfach zu lösen, klar, wenn man entkrampft genug ist, die Sache cool zu betrachten. Wenn man aber schnell und unbedingt und doch noch in den nächsten fünf Minuten... dann sage ich mir halt, ok, drei oder vier Befehle von vi habe ich mir ja notiert, also ab damit.

Es ist ja nicht so, dass ich eine Abneigung gegen den vi hätte oder irgendein grundsätzliches Argument, das gegen vi spricht. Ich war halt immer zu bequem, ihn besser kennen zu lernen und suchte daher nach Möglichkeiten, ihn zu umgehen.
Und das geht ja auch. Man muss ihn nicht unbedingt neu erlernen, nur weil FreeBSD ihn per Default gesetzt hat.

Wie ich das sehe, stimmst du mir da zu, was ich cool finde.

Ich zögerte nur einen kurzen Moment, aber lasst mich hier mal meine "gesammelten VI-Kommandos" veröffentlichen. Das ist in etwa so ein Notfall-Szenario, wenn man dann doch unverhofft im vi landet und sich am Kopf kratzt und nicht mehr weiter weiß. Die sind aus dem Netz gesammelt und tatsächlich komme ich mit einem Bruchteil davon bereits bei den meisten Fragen weiter. Aber mehr habe ich bisher eben auch nicht gebraucht und vielleicht liest jemand mit, der genau eine solche Hilfestellung nützlich findet:
Die basic-ex-Kommands:
:q Beenden
:q! Beenden ohne Speichern
:x Speichern und Beenden
:w Speichern
:set nu Zeige alle Zeilennummern an
:set nonu Verstecke alle Zeilennummern
:e! Verwirft saemtliche Aenderungen in der aktuellen Datei

Die basic-vi-Kommands:
i Text an der aktuellen Position einfuegen
I Text am Zeilenanfang einfuegen
a Text an der aktuellen Position anfuegen
A Text am Zeilenende einfuegen
o Unterhalb des Cursors eine neue Zeile einfuegen
O Oberhalb des Cursors eine neue Zeile einfuegen
S Zeile loeschen und Text ersetzen
R Vorhandene Zeichen mit neuem Text ueberschreiben
J Aktuelle und folgende Zeile zusammenfuehren
~ Gross-/Kleinschreibung umsetzen
. Letzte Aktion wiederholen
u Letzte Aenderung zuruecknehmen
U Zeile in ihren urspruenglichen Zustand zurueckversetzen

dd Aktuelle Zeile loeschen
 
Themenstarter #8
Mein Senf dazu ist nicht besonders hilfreich, denn, anstatt mich jemals an vi zu gewöhnen und wenigstens die Grundfunktonionen zu erlernen, habe ich "Zeit Lebens" immer versucht, ihn möglichst zu umgehen und das ist mir auch weitgehend gelungen.
Also, nur deshalb, weil vi in FreeBSD der Default-Editor ist, muss man den nicht unbedingt benutzen.
Es gibt viele gute Gründe dafür, es doch zu tun, aber für mich war immer ausschlaggebend, dass ich nicht für die gaanz gaanz wenigen Einsätze, wo ich den vi wirklich mal brauchte (weil eine SW das so verlangt, etwa vipw), diesen erlernen wollte. Hätte ich eh alles wieder vergessen, wenn ich ihn eben nicht ständig benutze.

Vielleicht ist das eine Frage, die du dir auch stellen solltest.
Willst du wirklich vi lernen und benutzen? Dann Gut.
Willst du es nur deshalb, weil FreeBSD ihn per Default anbietet? Dann muss das nicht sein und wenn du dich in vim wohler fühlst, dann benutze doch den.

Nebenbei liefert FreeBSD nicht nur vi aus, sondern enthält auch ee und ich denke, das hat womöglich schon einen Grund. Bei weitem nicht alle FreeBSD-Nutzer wollen immer alles mit vi erledigen.
Manchmal wäre es besser das "Problem" zu lösen anstatt davor weg zurennen, in dem Falle ist die grund Erlernung von "vi" und die investierte Zeit eigentlich überhaupt nicht falsch, denn "vi" ist eigentlich immer mit dabei, und zum anderen ist das ein super "Editor" wenn man ihn beherscht ist man im endeffekt schneller und auch komfortabler am Ziel als mit so manch anderen Editoren, meine persönliche Erfahrung jedenfalls. Investiere mal ein wenig Zeit in "vi" und Du wirst merken das du ohne "vi" garnicht mehr willst... alleine schon die Tabulator Vervollständigung ist ungemein Nützlich... so wie viele andere geile Features in "(g)vi/m"
 
Themenstarter #9
Hi,

vi starten dann

Bash:
:set nu
Um Zeilenummern anzuzeigen

Bash:
1,5#
Dann wird dir der "Ausschnitt" Zeile 1 - 5 angezeigt und du kannst via

Bash:
1,5y
die Zeilen kopieren.

vi's Startdatei lautet $HOME/.nexrc und könnten so aussehen.

Code:
set nu
set sm
set ts=4
set verbose
set showmode
Hier habe ich mal ein Beispiel erstellt. asciinema

Ich bin aber kein vi Poweruser.
das ist eigentlich genau das, was ich umgehen wollte, mir die Startzeilen Nummer merken, zur Endzeile navigieren und dann den Befehl n,n y ausführen... aber vielleicht geht das im "vi" auch nicht anders.. k.a.
 

Andy_m4

Well-Known Member
#10
in dem Falle ist die grund Erlernung von "vi" und die investierte Zeit eigentlich überhaupt nicht falsch, denn "vi"
Sehe ich komplett anders.
Das Problem beim vi ist halt, der ist schon sehr alt und eigentlich komplett aus der Zeit gefallen. Die Bedienung ist total unintuitiv. Man kann Bedienungswissen aus anderen Programmen kaum auf den vi übertragen. Man muss ihn also komplett lernen und dieses angeeignete Wissen nützt mir dann auch nur für den vi etwas.
Wie unfreundlich der vi ist merkt man ja auch, wenn man andere Editoren benutzt wie zum Beispiel der angesprochene EasyEdit (ee). Den konnte ich irgendwie sofort bedienen ohne etwas lernen zu müssen. Weil er sich eben nicht so großartig von anderen Programmen unterscheidet und die wichtigsten Befehle auch gleich eingeblendet hat.
Außer Masochismus fällt mir kein guter Grund ein den vi zu benutzen. :-)

denn "vi" ist eigentlich immer mit dabei,
Das ist korrekt, spielt aber in der Praxis kaum eine Rolle. Bei FreeBSD gibts den ee (sogar schon im Base-System; man muss also nichts nach installieren). Unter Linux wäre hier sowas wie der nano vergleichbar.
Und wie gesagt. Die Alternativen zum vi sind immer irgendwie intuitiv bedienbar. Ein System welches lediglich den vi bietet dürfte heutzutage recht selten sein. Die handvoll Fälle in den letzten Jahrzehnten, wo ich wirklich mal auf den vi angewiesen war haben meine Kenntnisse gereicht. :-)

zum anderen ist das ein super "Editor" wenn man ihn beherscht ist man im endeffekt schneller und auch komfortabler am Ziel als mit so manch anderen Editoren
Hättest Du das zu VIM gesagt, wäre ich noch geneigt gewesen Dir zuzustimmen. So aber: Nein.
Ich verbringe viel Zeit im Texteditor. Das ist sozusagen mein Hauptwerkzeug. Dementsprechend liegt mir natürlich viel an Effizienz. Auch wenn das am Anfang eine steile Lernkurve bedeutet. Und nein. Der vi kam da niemals fürs daily-use in Betracht, obwohl ich ihn gefühlt schon ewig kenne.

Man mag das anders sehen, wenn man mit dem vi sozialisiert wurde. Aber heutzutage gibts so viele Alternativen. Wenn da also jemand mit der Fragestellung um die Ecke kommt: "Sollte ich den vi lernen?"
Dann würde ich sagen: "Kannste machen wenn Du Spaß daran hast, aber Du kommst auch ohne den vi durchs Leben"