Vim Visual-Modus: Wählen Sie den aktuellen Block unter dem Cursor aus

971
krystah

In Anbetracht der aktuellen Daten:

ID NAME AGE  1 Joan 29 2 Peterson 16 3 Hunt 47 4 Wenche 12 5 Kennedy 29 6 Lottie 31 

Und der Cursor ist auf der Nin NAME, wie würde ich mich über den Text markieren, so dass, wenn |die Begrenzungszeichen des visuellen Block ist, sollte die Auswahl so sein

ID |NAME | AGE  1 |Joan | 29 2 |Peterson| 16 3 |Hunt | 47 4 |Wenche | 12 5 |Kennedy | 29 6 |Lottie | 31 

Das nachgestellte Leerzeichen nach jedem Element Petersonist nicht unbedingt erforderlich, aber ich brauche eine schnelle Möglichkeit, um den aktuellen Block hervorzuheben, falls er vorhanden ist.

6
Durch das Betrachten der aktuellen Antworten wurde mir klar, dass ich weiter spezifizieren sollte - ich möchte keine magischen Zahlen verwenden. Im Fall von "4j" ist 4 eine magische Zahl. Ich möchte einen schnellen Weg, dies zu tun, ohne die manuelle Zählung und den Jazz zu erledigen. krystah vor 10 Jahren 0
Ich habe eine Lösung ohne "magische Zahlen" bereitgestellt, aber Sie haben die Suche nach Buchstaben nicht verboten, die ich immer noch verwende. Sie müssen eine Art Zugeständnis machen, um das längste Wort in der Spalte zu finden, so dass der Auswahlblock die richtige Größe hat (wenn auch der Leerraum perfekt sein soll). treddy vor 10 Jahren 0
Ich bezog mich auf den Teil Ihrer Antwort "9999999j". Es gibt mehrere Gründe, warum ich magische Zahlen nicht verwenden möchte. Der Hauptgrund ist offensichtlich, dass es nicht gut funktioniert, wenn sich Inhalte unterhalb der Datentabelle befinden. Wenn es nur eine Möglichkeit gäbe, sich bis zu einer leeren Zeile nach unten zu bewegen. Hm. krystah vor 10 Jahren 0
4 oder 9999 sind keine magischen Zahlen (sie sind offensichtlich unterschiedlich und kontextabhängig, daher gibt es nichts Magisches mit ihnen), aber was Sie * wollen * ist eine magische Methode: Sie würde in jedem Kontext gleich funktionieren. Wenn Sie in `: help`, auf vim.org oder im vim-Wiki nichts gefunden haben, gibt es es einfach nicht. Fordern Sie uns auf, diese Funktion für Sie zu schreiben? romainl vor 10 Jahren 0
Genau das meine ich mit 'magisch'. Nicht flexible, kontextabhängige Zahlen. Ich versuche, dies zu umgehen, ohne auf eine große Funktion oder ein vorhandenes Plugin zurückzugreifen. Im Grunde möchte ich also Folgendes: Gibt es ein bekanntes Vim-Textobjekt, das den aktuellen Block umfasst? Wenn ja, würde ich es gerne hören. Wenn nicht, greife ich zu einem Plugin. krystah vor 10 Jahren 0
Nun, das ist genau das Gegenteil von einer magischen Zahl, aber was auch immer, es gibt kein natives Textobjekt mit "gezackter Textspalte" (wie Sie bereits wissen, wenn Sie `: help motion.txt 'gelesen haben), aber dafür gibt es ein Plugin natürlich meine Antwort sehen. romainl vor 10 Jahren 0

4 Antworten auf die Frage

1
romainl

Mit dem Cursor auf dem Nof NAMEwürde ich einfach folgendes tun, ohne sich um Golf zu kümmern:

<C-v>}hhhhhhhh 

Aber das Plug-in für textobj-column macht genau das, was Sie wollen. Magisch.

Alle diese Lösungen scheinen für meine ursprüngliche Absicht zu manuell, also werde ich mich für das Plugin entscheiden, danke. krystah vor 10 Jahren 0
0
treddy

Hier ist eine Möglichkeit, dies zu tun:

  1. Verwenden Sie control-vzuerst den Sichtblockiermodus
  2. Geben 2jSie dann zwei Zeilen zum PetersonEintrag ein
  3. Verwenden Sie Kleinbuchstaben e, um die Blockauswahl an das Ende des Wortes zu verschiebenPeterson
  4. Der Typ 4j, um die Auswahl in den letzten vier Zeilen nach unten zu verschieben

Edit: Wenn Sie wirklich darauf bestehen, "magische Zahlen" zu vermeiden, können Sie etwas wie hier beschrieben tun: https://stackoverflow.com/questions/3736678/how-do-you-select-a-whole-column-in-visual- Block-Modus

  1. :set nosol(damit der GBefehl nicht zur ersten Zeile der visuellen Blockauswahl zurückkehrt)
  2. control-v
  3. /P (Sie sagten keine magischen Zahlen, verbieten aber nicht die Suche nach Buchstaben - wenn das Leerzeichen nicht entscheidend ist, können Sie dies ignorieren.)
  4. e (gehe zum Ende des Wortes)
  5. G (Blockauswahl nach unten verschieben)

Weitere Tipps:

  • Wenn Sie denselben Block später erneut auswählen müssen, können Sie ihn eingeben gv
  • vwird für den zeichenweisen visuellen Modus und Vfür zeilenweise verwendet, während control-vwie oben für den blockweisen visuellen Modus gilt

Nützliche Hinweise (außer Internet):

  • Das Buch Practical Vimvon Drew Neil ist wirklich gut geschrieben
Ja, sowohl Sie als auch Ygonchos Antworten erreichen das Ziel am Ende, aber ich suche nach einem Weg, dies ohne "magische Zahlen" zu tun. Ich habe in einem Kommentar weiter unten meine Frage angegeben. krystah vor 10 Jahren 0
0
ygoncho

Es gibt Skripts, die dies vereinfachen. Wenn Sie jedoch Raw Vim verwenden möchten, ist hier meine bekannteste Methode:

ein. Stellen Sie sicher, dass Ihre letzte Zeile der Datei mit Leerzeichen gefüllt ist, etwa wie folgt:

"______________________________________".

Gehen Sie dann zum ersten Buchstaben N in "Name". Hit ctrl-v, w, 999999jund die Spalte wird ausgewählt.

Die letzte Zeile muss mit Leerzeichen gefüllt sein, falls Ihre Datei in einer neuen Zeile endet, da der visuelle Modus keine Teile der Datei auswählen kann, die noch nicht erstellt wurden. Wenn die letzte Zeile ein brauchbarer Inhalt ist, brauchen Sie dies nicht. ctrl-v+wwählt ein Wort aus, dann 999999jnimmt 99999 Zeilen den Cursor nach "unten" (oder weniger, wenn die Datei kleiner ist).

Hinweis: Sie werden sehen, dass dies eine vollständige Spaltenauswahl ist und die Leerzeichen sich ein wenig von dem unterscheiden, was Sie angegeben haben (aber Sie sagten, dies sei unwichtig). Soweit ich weiß, wenn Sie möchten, dass die Spalte am Ende des größten Wortes und nicht am Anfang des nächsten Worts ausgerichtet wird, müssen Sie die größte Wortgröße manuell suchen, visuell diese Länge auswählen und dann tun so etwas wie 99999j.

Ja, sowohl Sie als auch Ihre Antworten erledigen die Aufgabe, aber ich suche nach einem Weg, dies ohne "magische Zahlen" zu tun. Schau dir den Kommentar unter meiner Frage an :) krystah vor 10 Jahren 0
0
jgeralnik

Das gleiche wie die Antwort von Ygoncho, aber ohne "magische Zahlen"

ctrl-v, w, G

G geht direkt zur letzten Zeile einer Datei, ohne ein paar Mal '9' zerschlagen zu müssen

Das war mein erster Gedanke beim Lesen der Lösung, aber G achtet nicht auf Ihre aktuelle horizontale Position und kann Sie sehr wahrscheinlich zum ersten Zeichen der letzten Zeile bewegen, wenn dies tatsächlich das letzte Zeichen in der Datei ist. Irgendwie icky krystah vor 10 Jahren 0
Zunächst einmal, 99999j auch nicht. Vorausgesetzt, Ihre Daten sind wie in der Frage ohne Leerzeile am Ende formatiert, funktionieren sie einwandfrei. jgeralnik vor 10 Jahren 0
Der gedachte Anwendungsfall für diese Frage bestand darin, statische Arrays und dergleichen leicht zu formatieren und damit zu arbeiten, so dass ich praktisch nichts darunter hätte. Aber schau dir das Plugin romainl an, es ist wirklich ordentlich! krystah vor 10 Jahren 0