2009-06-30 14 views
177

Ich bin mir sicher, dass es früher ein Plugin für diese Art von Zeug gab, aber jetzt, wo ich es brauche, kann ich es nicht finden (natürlich), also werde ich einfach nett und einfach fragen.Wie wählt man zwischen Klammern (oder Anführungszeichen oder ...) in Vim?

Was ist der einfachste Weg, um zwischen Klammern, Anführungszeichen oder allgemein eine Liste von passenden Zeichen auszuwählen?

write (*, '(a)') 'Computed solution coefficients:' 

Zum Beispiel, hier würde Ich mag (a) auszuwählen, oder Computed solution coefficients:.

Ich bin nicht in Multiline interessiert, nur Fälle, die in einer Zeile auftreten.

Antwort

223

Verwenden Sie den gewünschten Navigationstasten innerhalb der Klammern, dann können Sie entweder yi( oder yi) verwenden, um alles innerhalb der passenden Parens zu kopieren. Dies funktioniert auch mit eckigen Klammern (z.B. yi]) und geschweiften Klammern. Zusätzlich zu y können Sie auch Text löschen oder ändern (z. B. ci), di]).

Ich versuchte dies mit doppelten und einfachen Anführungszeichen und es scheint auch dort zu arbeiten. Für Ihre Daten, das tue ich:

write (*, '(a)') 'Computed solution coefficients:' 

Cursor nach C, dann yi' eingeben. Bewegen Sie den Cursor auf eine leere Zeile, traf p und

Computed solution coefficients: 

Als CMS noted bekommen, das funktioniert für visuellen Modus Auswahl als auch - nur vi) verwenden, vi}, vi' usw.

+0

Funktioniert nicht mit getrennten Wörtern. – Rook

+0

Ich bin in der Regel auf der Suche nach einer Möglichkeit, alles zwischen vordefinierten übereinstimmenden Zeichen (normalerweise nur einfache und doppelte Anführungszeichen und Klammern aller Arten) auszuwählen. – Rook

+0

Was meinst du mit getrennten Wörtern? Ich probierte es auf "[x, y, z]" und es fiel "x, y, z" –

25

Diese Methode der Auswahl ist in der Vim-Hilfe eingebaut und gut abgedeckt. Es umfasst XML-Tags und mehr.

Siehe :help text-objects.

+1

: Hilfe Text-Objekte nähert sich den nützlichen Sachen ... Sie könnten zumindest einige der häufigsten erwähnen, wie ein "und ein (wenn im visuellen Modus. – Stobor

+2

(Auch +1, obwohl eine lange Zeit Vim Benutzer, wusste ich nicht über diese!) – Stobor

+0

@Stobor. Cheers behoben, die Referenz – michael

7

Verwenden Pfeile oder hjkl einem der Klammerung Ausdrücke zu erhalten, dann v visuell (d.h. Auswahl) Modus auszuwählen, dann % zur anderen Halterung zu springen.

+5

(tut nicht Zitate, leider, obwohl ...) – Stobor

3

eine Vim-Funktion in .vimrc Schreiben Sie die searchpair integrierte Funktion mit:

searchpair({start}, {middle}, {end} [, {flags} [, {skip} 
      [, {stopline} [, {timeout}]]]]) 
    Search for the match of a nested start-end pair. This can be 
    used to find the "endif" that matches an "if", while other 
    if/endif pairs in between are ignored. 
    [...] 

(http://vimdoc.sourceforge.net/htmldoc/eval.html)

197

zwischen den einfachen Anführungszeichen wählen ich normalerweise ein vi' ("innere Apostrophe wählen ").

Innerhalb einer Klammer Block, verwende ich vib ("inneren Block wählen")

Innerhalb einer geschweiften Klammern blockieren können Sie viB ("capital B")

Damit die Auswahl "inklusive" verwenden (Wählen Sie auch die Anführungszeichen, Klammern oder geschweiften Klammern), die Sie a anstelle von i verwenden können.

Sie können mehr über die Text object selections auf dem Handbuch lesen.

+0

danke für diesen Tipp, habe ich gesucht und nach etwas ähnlichem gefragt und war nicht zufrieden mit meinen Ergebnissen. Awesome. – alfredodeza

+0

dieser Tipp ist sehr einfach und einfach in meinem Gehirn und Muskelspeicher zu verpflichten. Danke. – Ghazaly

+0

Vielen Dank für den Link zu den Dokumenten. – thorncp

15

Für die Auswahl in einfachen Anführungszeichen verwenden Sie vi'.

Für die Auswahl in Klammern verwenden Sie vi(.

+3

Hinweis: 'ci'' oder' ci ('zum Ändern statt zur visuellen Auswahl. Aber es macht genau das, was ich wollte. Danke :) – Norris

+0

Die zweite funktioniert nur, wenn in diesem() Block, also normalerweise ich '% vi (' oder '% vib' –

-7

Eine einfache Keymap in Vim würde dieses Problem lösen. map viq F "lvf" hh Der obige Befehl bildet viq auf die Schlüssel um zwischen Anführungszeichen zu suchen. .. Ersetzen Sie "mit einem beliebigen Zeichen und erstellen Sie Ihre keymaps Haften Sie diesen in vimrc während des Starts und Sie sollten sie in der Lage sein, jedes Mal verwenden

+2

gibt es einen Standard-Vim-Befehl für diese, keine Notwendigkeit von Keymap – Adriana

1

Ich habe ein Plugin vim-textobj-quotes gemacht: https://github.com/beloglazov/vim-textobj-quotes

Es stellt Textobjekte für die am nächsten liegenden Paare von Anführungszeichen aller Art. Mit nur iq oder aq können Sie mit dem Inhalt von einzelnen ('), doppelten (") oder zurück (`) Anführungszeichen, die derzeit den Cursor umgeben, vor dem Cursor arbeiten oder dahinter (in dieser Reihenfolge der Präferenz). Mit anderen Worten, es springt vorwärts oder rückwärts, wenn es nötig ist, um die Anführungszeichen zu erreichen.

Es ist leichter zu verstehen, indem auf Beispiele suchen (der Cursor mit | dargestellt):

  1. Vorher: foo '1, |2, 3' bar; nach Drücken von diq: foo '|' bar
  2. Vorher: foo| '1, 2, 3' bar; nach dem Drücken diq: foo '|' bar
  3. Vorher: foo '1, 2, 3' |bar; nach dem Drücken diq: foo '|' bar
  4. Vorher: foo '1, |2, 3' bar; nach dem Drücken daq: foo | bar
  5. Vorher: foo| '1, 2, 3' bar; nach dem Drücken daq: foo | bar
  6. Vorher: foo '1, 2, 3' |bar; nach dem Pressen daq: foo | bar

Die obigen Beispiele für einfache Anführungszeichen angegeben werden, funktioniert das Plugin genau die gleiche Art und Weise für die doppelte (") und zurück (`) Zitate

Sie auch alle anderen Betreiber nutzen können. : ciq, diq, yiq, viq usw.

auf der gitHub Seite einen Blick Sie bitte den obigen Angaben für mehr verknüpfte

1

ich ein Detail auf die meisten vo hinzufügen würde. ted Antwort:

Wenn Sie gvim mit und wollen in die Zwischenablage kopieren, verwenden Sie

"+<command>

alle Inhalte in Klammern zu kopieren (oder Pars oder geschweiften Klammern)

Für Beispiel: "+yi} kopiert den Inhalt zwischen den geschweiften Klammern Ihres Cursors in die Zwischenablage.