2010-03-14 10 views
9

Ich versuche, vim richtig zu verwenden - um mir zu helfen, habe ich meine Pfeiltasten auf "" so zugeordnet, dass ich gezwungen bin, {hjlk} zu verwenden, um sich zu bewegen.Befehl zum Umgeben eines Zeichens mit Leerzeichen in vim

Dies verursacht mir ein Problem, wenn ich will nur ein Zeichen mit Leerzeichen umgeben, zum Beispiel:

„2 + 3“ besser „2 + 3“

Zuvor formatiert ich habe meine setzen Cursor über die + und tippte:

i [Leerzeichen] [Pfeil rechts] [Leerzeichen] [Esc]

das 5 drückt ist.

Um dies zu tun, ohne den Pfeil I die Cursor über die + zu müssen scheinen setzen und gehen:

i [Leerzeichen] [Esc] LLI [Leerzeichen] [Esc]

Das sind 8 Pressen.

kann ich die "li" in einem "a" dem wandeln reduziert sie auf 7 Pressen:

i [space] [ESC] la [SPACE] [Esc]

Short Wenn man dies in ein Makro schreibt, gibt es dafür einen besseren Weg? Gibt es einen magischen vim-Befehl, der es mir erlaubt, es in weniger als 5 Drücken zu tun - und eine Art, es zu verallgemeinern, so dass ich ganze Wörter oder Symbole machen kann, zB wenn ich 3 == 4 in 3 umwandeln möchte == 4?

+0

nur neugierig, wie hast du deine Pfeiltasten auf ""? – Casey

+0

Für sechs Tastenanschläge können Sie 'i [Leerzeichen] [Esc] el.' Aber es gibt immer noch schnellere Wege als das, daher ist dies ein Kommentar und keine Antwort :) –

+0

Casey: Um die Pfeiltasten in Ihrem ~/.vimrc: Karte "" [newline] Karte "" [newline] Karte "" [newline] Karte "" (Sorry - ich kann keine neuen Linien in den Kommentaren setzen !) –

Antwort

15

Persönlich denke ich, dass es am sinnvollsten ist, zu zerstören, was Sie umgeben wollen, und es dann neu zu machen.

c w "" ESC P 

Offensichtlich können Sie sowohl das Objekt als auch die Anführungszeichen mit allem, was Sie möchten, ersetzen.Um nur ein Zeichen zu ändern + [Leerzeichen] + [Leerzeichen] zu sein, würden Sie

s [space] [space] ESC P 

auf das tun +

+2

Schön - ich bin immer noch daran gewöhnt, dass das Löschen von Dingen sie in den Paste-Puffer legt. Und ich benutze seit 10 Jahren vi ... Deshalb zwinge ich mich endlich richtig zu lernen! sed ist next ... –

5

Die erste Sache, die nach dem Lesen nur der Titel in den Sinn kommt, ist surround.vim, die ein ausgezeichnetes Skript ist, um alle Arten von nützlichen Dingen in Übereinstimmung mit dem, was Sie beschrieben haben, zu tun.

Ihr spezielles Problem zu lösen, würde ich wahrscheinlich den Cursor auf die + positionieren und:

s [Leerzeichen] + [Leerzeichen] [esc]

Um 3 == zu ändern 4 in 3 == 4, könnte ich den Cursor auf die erste =, und:

i [Raum] [esc] ww.

+0

Ich mag diese zweite Lösung von Ihnen, weil sie auf jedem Token zu funktionieren scheint. Plus das doppelte w ist einfacher, diese zwei verschiedenen Schlüssel zu schreiben. –

1

Versuchen Sie den Cursor über die '+' zu positionieren und tippen Sie:

Q1i [Leerzeichen] [Pfeil nach rechts] [Leerzeichen] [Pfeil links] [esc] q

Dies wird eine schnelle Makro in Steckplatz 1 aufzuzeichnen, die Sie wiederverwenden können, wann immer Sie Lust haben, diesen Willen den Cha umgeben racter unter dem Cursor mit Leerzeichen. Sie können es mit @1 erneut aufrufen.

Es gibt auch die vielseitigere ein:

q1ea [Leerzeichen] [esc] bi [Leerzeichen] [Pfeil nach rechts] [esc] q

, die das Wort unter der umgeben wird Cursor ("==" zählt als ein Wort) mit Leerzeichen, wenn Sie @1 drücken.

+0

Wie ich schon sagte, ich weiß, ich könnte es mit einem Makro machen, aber ich frage mich, ob es einen intelligenten Befehl gibt, von dem ich nichts weiß! –

1

Sie könnten ein Makro mit einem der beschriebenen Aktionen erstellen und nennen es jedes Mal wenn Sie es brauchen (wie amphetamachine vorgeschlagen, während ich schrieb) oder einfach & ersetzen suchen könnte:

:%s/\(\d\)\(+\|-\)\(\d\)/\1 \2 \3/g 

Sie haben wahrscheinlich zu führe diesen Befehl zweimal aus, da nur jedes zweite Vorkommen von +/- gefunden wird.

EDIT:

Dies alles ohne die Notwendigkeit ersetzen wird zweimal aufgerufen werden:

:%s/\d\@<=+\|-\d\@=/ \0 /g 
1

Sie könnten eine Zuordnung wie folgt aufgebaut (drücken Sie im visuellen Modus betreten Räume zu wickeln):

:vnoremap <CR> <ESC>`<i<SPACE><ESC>`>la<SPACE><ESC>h 
3

Hah! Ich habe lange versucht, herauszufinden, wie man einen Block in Räumen umgibt, und ich habe schließlich die richtige Kombination gefunden.

Mit surround.vim sagen Sie Raum für die Surround-Auswahl.

Also für diesen speziellen Fall würde ich den visuellen Modus (ein guter Trick für die Bedienung auf einzelne Zeichen unter dem Cursor BTW) so: "vs" < - vier Tasten drücken!

Ich habe auch eine Angewohnheit Dinge wie Argumentlisten ohne Leerzeichen zu tippen. Mit dieser Technik können Sie einfach mit w zum zweiten Argument navigieren und "vws" sagen, um ein Wort visuell auszuwählen und mit Leerzeichen zu umgeben.

Ich bevorzuge visuelle Auswahlmodus im Allgemeinen. Auch die alternative Surround-Syntax "ysw" schließt das Wort Endkomma aus, das von "vw" abgefangen wird.

2

Ich habe mich auch darüber gewundert. Ich versuchte es mit Surround.vim, aber der naive Ansatz

S<space>

(nach einer visuellen Auswahl zu treffen) funktioniert nicht, da der Raum bereits als Modifikator für das Hinzufügen von Raum zu anderen umgebenden Zeichenpaaren aufgenommen wird. S<space><cr> fügt ein^M in die Ausgabe ein. Ss funktioniert fast, fügt aber erst einen Platz ein.

nach tpope/surround.vim auf Github zu fragen:

S<space><space>

im visuellen Modus arbeitet. alternativ funktioniert ysl<space><space> für den normalen Modus für ein einzelnes Zeichen

0

Diese Methode können Sie verwenden. um den Befehl beim nächsten + zu wiederholen.

Setzen Sie den Cursor über die + und Typ:

s[SPACE][CTRL-R]"[SPACE][ESC] 
0

Ich weiß, das ist und alten Thread, aber für jemanden nützlich sein könnten. Ich habe festgestellt, dass die Karte (wo es sich auf alles, was Sie wollen!)

noremap <leader>ss diwi<SPACE><C-R>"<SPACE><ESC>B 

ok funktioniert sowohl für das Drehen ‚a + b‘ in ‚a + b‘ (wenn sie über die ‚+‘ Zeichen verwendet) und um 'a == b' in 'a == b' zu verwandeln (wenn es entweder über das erste oder das zweite '=' Zeichen verwendet wird).

Ich hoffe, es ist nützlich für jemanden.

Verwandte Themen