Verwenden Sie vim, wenn Sie sowohl die öffnende als auch die schließende Klammer / Klammern / etc. Drücken

8

Wenn ich programmieren lernte, drückte ich sowohl die öffnende als auch die schließende Klammer / etc, dann die linke Pfeiltaste und gab dann den Text ein. Zum Einfügen [hello]würde ich also tippen []und dann den linken Pfeil so, dass er über der ersten Klammer steht ( [).

Ich mag das, weil ich weiß, dass ich immer die richtige Anzahl von Klammern / etc habe und ansonsten das Gefühl habe, dass meine Hand sich zur Klammer / etc-Taste hin und her bewegen muss

Aber wenn ich mich an die Vim-Denkweise halte, möchte ich nicht ständig nach den Pfeiltasten greifen. Gibt es etwas, das ich tun könnte, ohne die Pfeiltasten zu verwenden oder ständig aus dem Einfügemodus zu wechseln, um einfach zu drücken hund wieder einzusteigen?

JZL003
quelle

Antworten:

5

Möglicherweise suchen Sie nach dem Auto-Pair- Plugin:

Wenn Sie ein Zeichen eingeben , wie {, (oder wird [dieses Plugin den symetric Charakter und ersetzen Sie den Cursor im Einfügemodus zwischen den beiden Klammern automatisch hinzuzufügen. Es ist auch in der Lage, beim Löschen dieser Zeichen "klug" zu sein.

Auch wenn ich Ihnen einen Rat geben darf, vergessen Sie die Pfeiltasten . Was auch immer Sie tun möchten, es ist immer eine schnellere Bewegung verfügbar, ohne dass Sie Ihre Hände aus der Startreihe bewegen müssen. Es kann einige Zeit dauern, bis Sie sich daran gewöhnt haben, aber wenn es eine Gewohnheit ist, werden Sie sie nicht einmal vermissen.

statox
quelle
Danke für den Kommentar und wenn es dir nichts ausmacht, dass ich frage; Geben Sie "[", dann "Hallo", dann "]" ein. Ohne die Surround-Plugins (was eine großartige Idee zu sein scheint, danke) scheint es ziemlich umständlich zu sein, hin und her zu gehen, auch ohne das Problem, möglicherweise die richtige Anzahl von Klammern zu verlieren
JZL003
Nun, eigentlich verwende ich immer entweder Auto-Pair oder Surround.vim (siehe die Antwort von Peter), aber wenn ich das ohne Plug-Ins machen müsste [, würde ich tun ] , <Esc>(was den Cursor auf das setzt ] ) und schließlich iwas Platzieren Sie den Cursor im Einfügemodus zwischen den Klammern.
Statox
@statox Wie bewegen Sie den Cursor im Einfügemodus zwei Positionen nach links? Mit ctrl-o 2h? Ist das schneller als deine Hand zu den Cursorn zu bewegen? ;)
Vitor
@Vitor Nein, ich drücke die Esc-Taste, um in den normalen Modus zu wechseln. Bei einer Bewegung von weniger als 3 Zeichen werde ich wahrscheinlich mehrmals drücken hoder jich werde andere Bewegungen verwenden. Es fühlt sich für mich schneller an, aber ich verstehe, dass einige Leute es anders fühlen :)
statox
@statox Nach 10 Jahren mit vim habe ich immer noch Probleme, hjkl zu verwenden, und speziell in diesem Szenario, das ich gerade beschrieben habe. Danke für deine Kommentare! :)
Vitor
8

Es gibt viele "Pair" -Plugins , die dies automatisch für Sie erledigen. Alle reiben mich jedoch falsch. Ich neige dazu, das Surround.vim- Plugin von Tim Pope zu verwenden . Ich mache folgendes: <c-s>]Im Einfügemodus, um []mit dem Cursor in der Mitte der Klammern einzufügen .

Peter Rincker
quelle
Mehr Menschen müssen darüber Bescheid wissen. Vim Surround ist nützlicher als nur das Verpacken von Dingen. Außerdem fühle ich, dass das Paar Plugin Unwohlsein hat, sehr aggressiv ist und am Ende Tastenanschläge für das Format verschwendet
rgalbo
4

Wenn Sie nur einen Platz benötigen , sich zu bewegen, ctrl-oim Einfügemodus Ihren nächsten Eingang einen normalen Befehl macht, so ctrl-o, hbewegt sich wieder ein. Die Modeline wird angezeigt, --- (insert) ---bis Sie den normalen Befehl eingeben .

StarWeaver
quelle
2

lh-Klammern bieten Zuordnungen für den Einfüge-, Normal- und visuellen Modus zum Einfügen von Klammerpaaren.

Anmerkungen:

  • Das Hinzufügen neuer Klammerpaare ist ganz einfach.
  • Die Einfügungsmoduszuordnungen sind kontextsensitiv - dh nicht innerhalb von Zeichenfolgen- oder Kommentarkontexten erweitert, ...
  • Im Gegensatz zum Surround-Plugin sind die umgebenden Zuordnungen intuitiv, jedoch nicht im Vim-Stil. Das heißt, das Schlagen (im visuellen Modus umgibt (standardmäßig), wir müssen keine si(ähnlichen Sequenzen treffen .
Luc Hermitte
quelle
2

Frühere Antworten sind sehr gut. Aber ich denke, Sie möchten vielleicht etwas einfacher. Persönlich benutze ich h j k lzum Bewegen. Daher habe ich meiner .vimrc Folgendes hinzugefügt:

inoremap <c-j> <esc>ji
inoremap <c-k> <esc>ki
inoremap <c-h> <esc>i
inoremap <c-l> <esc>2li

Nur ein kleiner Tipp. Sie sagten , dass Ihr Verfahren ist i, [], <Esc>hi.

Es gibt vom Bediener ausstehende Zuordnungen, dh Sie können ci[oder di[oder ii[.

Patrick
quelle
1

Ich persönlich bin kein großer Fan der automatischen Einfügung von Zeichen. Sie können einfach eine Reihe von Zuordnungen definieren, um Text und mehr den Cursor an die gewünschte Stelle einzufügen:

" Add brackets with closing bracket
inoremap <C-a>[ []<Left>
inoremap <C-a>( ()<Left>

" For C & C-like languages
inoremap <C-a>{ {<Cr><Cr>}<Up>

" For Ruby
inoremap <C-a>def def<Cr>end<Up>

Beachten Sie, dass ein Plugin wie ultisnips auch solche Aufgaben ausführt , jedoch fortgeschrittener ist. Zum Beispiel kann ich in Javascript Folgendes eingeben:

if<Tab>hello

und ich bekomme:

if (hello) {

}

Sie können ein einfaches Snippet hinzufügen, um die Klammern zu vervollständigen. Dies ist eine spezielle .snippet-Datei, in der Folgendes gespeichert ist ~/.vim/UltiSnips/all.snippets:

snippet (
(${0})
endsnippet

snippet [
[${0}]
endsnippet

snippet {
{
${0}
}
endsnippet

${0} ist die Cursorposition.

siehe :help UltiSnips-adding-snippetsfür weitere Informationen.

Beachten Sie, dass für ultisnips Python erforderlich ist. Ein weiteres bekanntes Plugin ist vim-snipmate . Das Vim-Wiki enthält eine vollständige Liste der Snippet-Plugins .

Martin Tournoij
quelle