Vim Visual Modus: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt)
Zeile 122: Zeile 122:
 
Es ist keine gute Praxis, mehrere IDs mit demselben Namen zu haben. Lass uns sie inkrementieren. Setze deinen Cursor auf die zweite Zeile, auf die Zahl "1" im Text "app-1":
 
Es ist keine gute Praxis, mehrere IDs mit demselben Namen zu haben. Lass uns sie inkrementieren. Setze deinen Cursor auf die zweite Zeile, auf die Zahl "1" im Text "app-1":
  
Starte den blockweisen visuellen Modus, gehe 3 Zeilen nach unten (Ctrl-v 3j). Du solltest nun alle verbleibenden "1" auswählen.
+
Starte den blockweisen visuellen Modus, gehe 3 Zeilen nach unten ('''Ctrl-v 3j'''). Du solltest nun alle verbleibenden "1" auswählen.
Gib `g Ctrl-a` ein.
+
Gib '''g Ctrl-a''' ein.
 
Das war's! Jetzt ist alles inkrementiert:
 
Das war's! Jetzt ist alles inkrementiert:
 
  <nowiki><div id="app-1"></div></nowiki>
 
  <nowiki><div id="app-1"></div></nowiki>
Zeile 130: Zeile 130:
 
  <nowiki><div id="app-4"></div></nowiki>
 
  <nowiki><div id="app-4"></div></nowiki>
 
  <nowiki><div id="app-5"></div></nowiki>
 
  <nowiki><div id="app-5"></div></nowiki>
Extra: `Ctrl-x`/`Ctrl-a` können auch Buchstaben inkrementieren, mit:
+
Extra: '''Ctrl-x/Ctrl-a''' können auch Buchstaben inkrementieren, mit:
<nowiki>
 
 
  :set nrformats+=alpha
 
  :set nrformats+=alpha
</nowiki>
 
 
Also, wenn du hast:
 
Also, wenn du hast:
 
  <nowiki><div id="app-a"></div></nowiki>
 
  <nowiki><div id="app-a"></div></nowiki>

Aktuelle Version vom 17. Juni 2024, 19:40 Uhr

Warum Visual Mode?

Wenn du einen anderen Texteditor oder eine IDE benutzt hast, kannst du wahrscheinlich einen Textblock hervorheben und Änderungen daran vornehmen. Der visuelle Modus von Vim funktioniert ähnlich: Du kannst einen Textblock auswählen und Änderungen daran vornehmen.

Du kannst Änderungen an einem Textobjekt mit Vims Normalmodus vornehmen, aber es gibt Zeiten, in denen der visuelle Modus besser geeignet ist. Angenommen, du hast folgendes:

const one = "ONE";
const TWO = "Two";

Du möchtest den Abschnitt ab dem "N" in "One" kleinschreiben und vor dem "T" in "Two" stoppen.

const one = "One";
const two = "Two";

Das lässt sich im Normalmodus nicht leicht bewerkstelligen, da du nur einen Teil der ersten und zweiten Zeile änderst, nicht die gesamten zwei Zeilen. Mit dem visuellen Modus kannst du das "n" bis vor das "T" visuell auswählen und den visuellen Modus Kleinschreiboperator (u) anwenden.

Der visuelle Modus kann nützlich sein, wenn du eine spezifische Gruppe von Texten anvisieren möchtest, die keinem erkennbaren Muster folgt.

(Tatsächlich kannst du dies im Normalmodus tun, indem du mit dem Cursor auf dem "N" bist und gu/Two eingibst: "Kleinschreibung von hier bis zum nächsten Vorkommen des Ausdrucks 'Two' anwenden". Ich finde es auch intuitiver, dies im visuellen Modus zu tun.)

Den visuellen Modus starten

Es gibt drei verschiedene visuelle Modi in Vim.

  • v - Zeichenweiser visueller Modus
  • V - Zeilenweiser visueller Modus
  • Ctrl-v - Blockweiser visueller Modus

Der zeichenweise visuelle Modus wird verwendet, um einzelne Zeichen auszuwählen.

Der zeilenweise visuelle Modus wählt ganze Zeilen aus. Es ist üblich, in der Programmierung Änderungen zeilenweise vorzunehmen. In den frühen Tagen der Programmierung basierten viele Editoren auf Zeilen, wie Ed.

Der blockweise visuelle Modus ermöglicht es dir, "Spalten" und "Zeilen" auszuwählen. Er bietet dir mehr Freiheit, dich in diesem Modus zu bewegen als in den ersten beiden. Es gibt auch bestimmte Dinge, die du nur im blockweisen visuellen Modus tun kannst (dazu später mehr).

In der unteren linken Ecke deines Vim-Fensters siehst du entweder -- VISUAL --, -- VISUAL LINE -- oder -- VISUAL BLOCK --, um anzuzeigen, in welchem visuellen Modus du dich befindest.

Während du dich in einem visuellen Modus befindest, kannst du zu einem anderen visuellen Modus wechseln, indem du entweder v, V oder Ctrl-v drückst. Wenn du dich beispielsweise im zeilenweisen visuellen Modus befindest und zum blockweisen visuellen Modus wechseln möchtest, tippe einfach Ctrl-v. Probier es aus!

Es gibt noch eine weitere Möglichkeit, den visuellen Modus zu starten:

  • gv - Dies startet den visuellen Modus im selben ausgewählten Bereich wie der letzte visuelle Modus. Angenommen, du hast gerade eine Großschreiboperation auf einem Textblock angewendet und vergessen, eine weitere Operation auf denselben Textblock anzuwenden. Statt zurückzugehen, neu auszuwählen und die Operation anzuwenden, kannst du die ersten beiden Schritte überspringen, wenn du gv verwendest. Es wird denselben Auswahlbereich wie der letzte erstellen, sodass du nur die benötigte Operation anwenden musst.

Ziemlich praktisch!

Im visuellen Modus bewegen

Sobald du dich in einem visuellen Modus befindest, kannst du deine Auswahl mit Vim-Bewegungen erweitern, wie hjkl. Weitere Informationen zu Bewegungen findest du unter :h motion.txt.

Während du dich in der visuellen Auswahl befindest, siehst du deinen Cursor an einem Ende der Auswahl. Er kann entweder oben links oder unten rechts sein. Du kannst deine Auswahl in eine Richtung erweitern, wo immer sich dein Cursor befindet. Wenn sich dein Cursor am unteren Ende befindet, wird durch Drücken von j die Auswahl nach unten erweitert, aber durch Drücken von k wird die Auswahl nicht nach oben erweitert, sondern nach oben verkleinert. Was ist, wenn du deine Auswahl nach oben und unten erweitern musst?

Du musst die Position deines Cursors in die Richtung ändern, in die du dich erweiterst.

Du kannst die Position deines Cursors mit o oder O während der visuellen Auswahl ändern. Wenn sich dein Cursor also am unteren Ende der Auswahl befindet und du nach oben erweitern möchtest, ändere die Cursorposition mit o und gehe mit k nach oben.

Den visuellen Modus verlassen

Es gibt drei Möglichkeiten, den visuellen Modus zu verlassen:

  • esc
  • Ctrl-c
  • Dieselbe Taste wie dein aktueller visueller Modus

Die ersten beiden sind sinnvoll. Hier ist, was das letzte bedeutet: Wenn du dich im zeilenweisen visuellen Modus (V) befindest, kannst du den zeilenweisen visuellen Modus verlassen, wenn du erneut V drückst. Wenn du dich im zeichenweisen visuellen Modus befindest, verlässt du den visuellen Modus, wenn du v drückst. Wenn du dich im blockweisen visuellen Modus befindest, verlässt du den visuellen Modus, wenn du ctrl-v drückst.

Operatoren im visuellen Modus

Vim ist ein modaler Editor. Das bedeutet, dass dieselbe Taste je nach Modus unterschiedlich funktionieren kann. Glücklicherweise überschneiden sich viele Tasten im visuellen Modus mit den Tasten im Normalmodus. Wenn du deine Operatoren im Normalmodus kennst, bist du gut vorbereitet. Wenn nicht, mach dir keine Sorgen, du musst dir nur die wichtigen merken (sie sind mnemonik-freundlich).

Um Operatoren im visuellen Modus zu verwenden, wähle zuerst einen Textbereich visuell aus (v/V/Ctrl-v + Bewegung) und drücke dann eine Operatorentaste im visuellen Modus. Das ist alles.

Hier sind einige der gebräuchlichsten:

  • u - kleinschreiben
  • U - großschreiben
  • d - löschen
  • c - ändern
  • y - kopieren
  • > - einrücken
  • < - ausrücken

Für weitere Operatoren siehe :h visual-operators.

Visual Mode und Ex-Befehle

Du kannst Ex-Befehle auf visuell ausgewählte Bereiche anwenden. Angenommen, du hast folgenden Text:

const one = "one";
const two = "two";

Und du möchtest const nur in diesen beiden Zeilen durch let ersetzen. Du kannst beide Zeilen mit dem zeilenweisen visuellen Modus (V) hervorheben und die Ersetzung mit:

:s/const/let/g

ausführen. Jeder Ex-Befehl funktioniert im visuellen Modus.

Wiederholen des visuellen Modus

Der Punktbefehl (.) von Vim wiederholt die letzte Änderung. Wenn du eine Operation im visuellen Modus wiederholst, wird dieselbe Operation auf denselben Textblock angewendet.

Angenommen, du hast diese beiden Zeilen mit dem zeilenweisen visuellen Modus gelöscht (Vjd).

const one = "one";
const two = "two";

Das nächste Mal, wenn du den Punktbefehl verwendest, werden auch die nächsten beiden Zeilen gelöscht.

Mehrere Texte einfügen

Du kannst mehrere Texte mit dem blockweisen visuellen Modus einfügen.

Angenommen, du hast folgendes und möchtest am Ende jeder Zeile ein Semikolon hinzufügen.

const one = "one"
const two = "two"
const three = "three"

So geht's:

  • Beginne mit deinem Cursor in der ersten Spalte, erste Zeile (das "c" in const one)
  • Wähle den blockweisen visuellen Modus aus, gehe zwei weitere Zeilen nach unten (Ctrl-v 2j). Es werden alle "c"s ausgewählt.
  • Wähle horizontal bis zum Ende ($)
  • Anhängen (A)
  • Tippe ;
  • Verlasse den visuellen Modus (esc)

Jetzt siehst du, dass ; an alle Zeilen angehängt wurde. Im blockweisen visuellen Modus kannst du Texte mit A oder I an mehreren Zeilen anhängen oder einfügen. Du kannst auch mehrere Zeichen mit r{Zeichen} ersetzen.

Eine Möglichkeit, Zeichen in mehreren Zeilen mit einem beliebigen visuellen Modus einzufügen, besteht darin, den Befehl :normal! zu verwenden (:h normal). Mit diesem Befehl kannst du einen Befehl im Normalmodus ausführen.

So kannst du ; mit dem zeichenweisen visuellen Modus einfügen:

  • Wähle alle 3 Zeilen aus (v2j)
  • Gib :normal! A; ein

TIPP: Wenn du dich nicht im blockweisen visuellen Modus befindest und Texte anhängen (A) oder einfügen (I) möchtest, denke daran, dass du vom aktuellen visuellen Modus mit Ctrl-v in den blockweisen visuellen Modus wechseln kannst.

Inkrementierende Nummern

Du kannst Spalten von Zahlen mit `Ctrl-a`/`Ctrl-x` in vim inkrementieren. Hier ist, wie du es auf mehrere Zeilen anwenden kannst.

Angenommen, du hast folgenden Text:

<div id="app-1"></div>
<div id="app-1"></div>
<div id="app-1"></div>
<div id="app-1"></div>
<div id="app-1"></div>

Es ist keine gute Praxis, mehrere IDs mit demselben Namen zu haben. Lass uns sie inkrementieren. Setze deinen Cursor auf die zweite Zeile, auf die Zahl "1" im Text "app-1":

Starte den blockweisen visuellen Modus, gehe 3 Zeilen nach unten (Ctrl-v 3j). Du solltest nun alle verbleibenden "1" auswählen. Gib g Ctrl-a ein. Das war's! Jetzt ist alles inkrementiert:

<div id="app-1"></div>
<div id="app-2"></div>
<div id="app-3"></div>
<div id="app-4"></div>
<div id="app-5"></div>

Extra: Ctrl-x/Ctrl-a können auch Buchstaben inkrementieren, mit:

:set nrformats+=alpha

Also, wenn du hast:

<div id="app-a"></div>
<div id="app-a"></div>
<div id="app-a"></div>
<div id="app-a"></div>
<div id="app-a"></div>

Verwende die gleiche Technik wie oben (Ctrl-v 3j g Ctrl-a) um die "id"s zu inkrementieren:

<div id="app-a"></div>
<div id="app-b"></div>
<div id="app-c"></div>
<div id="app-d"></div>
<div id="app-e"></div>

Auswählen des letzten visuellen Modusbereichs

Du hast gelernt, dass `gv` die letzte Auswahl im visuellen Modus auswählen kann. Aber wusstest du, dass du zur Position des Start- und Endcursors des letzten visuellen Modus gehen kannst?

`<        " gehe zur letzten Stelle der letzten visuellen Modusauswahl 
`>        " gehe zur ersten Stelle der letzten visuellen Modusauswahl

Betreten des visuellen Modus aus dem Einfügemodus

Der normale Modus ist nicht der einzige Modus, aus dem du den visuellen Modus betreten kannst. Du kannst den visuellen Modus aus dem Einfügemodus betreten.

Während du im Einfügemodus bist, gib ein: Ctrl-o v

  • Im Einfügemodus kannst du einen Befehl im normalen Modus mit Ctrl-o ausführen.
  • Während du in diesem normalen Modus bist, führe den visuellen Modus mit der Taste `v` aus.
  • Wenn du genau hinsiehst, wird unten links "--(insert) VISUAL--" angezeigt.

Das funktioniert mit jeder Taste für den visuellen Modus: `v`/`V`/`Ctrl-v`.

Extra: Auswahlmodus

Zusätzlich zum visuellen Modus hat vim einen Auswahlmodus. Wie der visuelle Modus hat der Auswahlmodus drei Modi:

gh        " zeichenweiser Auswahlmodus
gH        " zeilenweiser Auswahlmodus
gCtrl-h   " blockweiser Auswahlmodus

Der Auswahlmodus emuliert das Textmarkierungsverhalten eines regulären Editors näher als der visuelle Modus. In einem regulären Editor, nachdem du einen Textblock markiert hast, wenn du den Buchstaben "a" tippst, wird der markierte Textblock gelöscht und durch den Buchstaben "a" ersetzt. Der Auswahlmodus macht genau das: nachdem du deine Auswahl im Auswahlmodus getroffen hast, wird die Auswahl sofort durch den Buchstaben "a" ersetzt, wenn du ihn tippst.

Ich persönlich habe ihn nie benutzt, aber es ist gut zu wissen, dass er existiert.

Fazit

Wir sind am Ende angekommen. Wir haben viele Themen abgedeckt.

Wir haben gelernt, wie man den visuellen Modus betritt und verlässt. Wir haben gelernt, dass es drei Arten des visuellen Modus in Vim gibt: zeichenweise, zeilenweise und blockweise. Wir haben gesehen, dass der visuelle Modus viele Operatoren mit dem normalen Modus teilt. Wir haben gelernt, dass die Operation des visuellen Modus mit dem Punkt-Befehl (.) wiederholbar ist. Wir haben gelernt, wie man mehrere Zeilen von Zahlen/Buchstaben inkrementiert. Wir haben gelernt, wie man den visuellen Modus nicht nur aus dem normalen Modus, sondern auch aus dem Einfügemodus betritt. Schließlich haben wir die Existenz des Auswahlmodus kennengelernt.

Vielen Dank fürs Lesen bis hierhin. Ich hoffe, du hast ein oder zwei neue Dinge gelernt.

Viel Spaß beim Codieren!


Quelle