Wie kann ich mit Splits in Vim ohne Strg-W arbeiten?

24

In meinem Terminal kann ich nicht Ctrl+ eingeben W, da dies eine Verknüpfung zum Schließen einer Terminalregisterkarte ist.

Ich arbeite gerne mit Splits, aber ich kann keinen Weg finden, dies ohne zu tun C-W. Dies zwang mich Tabs zu verwenden, weil ich zwischen ihnen umschalten kann gt, gToder #gtwobei # eine Zahl ist , aber ich finde dies weniger bequem als Splits , da ich nur den Inhalt einer Datei auf einmal sehen kann.

Ich kann auch nicht verwenden, mouse=ada mein Terminal das nicht unterstützt.

Wie kann ich mit Splits in Vim arbeiten, ohne dass die Ctrl+ W-Kombination verfügbar ist?

Mateon1
quelle
1
Zuordnungen verwenden wincmd für Sie können zum Beispiel zuordnen: :nmap wj :wincmd j<cr>Es verhält sich wie CTRL-W j(in das Fenster unten verschieben). :help wincmd
Alex Kroll
@AlexKroll Warum postest du das nicht als Antwort? :-)
Martin Tournoij
1
@Carpetsmoker Ich denke, es ist keine vollständige Abdeckung für dieses Problem. CTRL-W jfunktioniert mit zählern (gehe zum n-ten fenster unten vom aktuellen) meine lösung nicht.
Alex Kroll
2
Normalerweise schätze ich solche Ratschläge nicht, aber ich würde mir ein anderes Terminal suchen. <C-W>Es ist zu nützlich, eine Abkürzung (nicht nur an vielen Stellen in Vim, sondern auch in Bash) zu verlieren. Ich wäre gespannt, welche anderen Tastenbelegungen das Terminal verbraucht - <C-T>? Zumindest würde ich prüfen, ob diese im Terminal konfigurierbar sind.
tommcdo

Antworten:

23

Sie können einfach eine <C-w>andere Kombination zuweisen , zum Beispiel:

:nnoremap <C-e> <C-w>

Sie können jetzt verwenden <C-e>und es wird so tun, als ob Sie gedrückt haben <C-w>.

Dadurch wird die Standardzuordnung überschrieben <C-e>(Bildlauf nach unten). Vim verwendet bereits alle Tasten auf der Tastatur. Die einzige Möglichkeit, dies zu verhindern, ist die Verwendung der Führungstaste, die wie ein "Präfix" wirkt:

:nnoremap <Leader>w <C-w>

Sofern Sie keine Neuzuordnung vorgenommen haben <Leader>, können Sie jetzt \w(nacheinander) verwenden. Eigentlich bevorzuge ich das, da mir STRG + Tastenkombinationen nicht gefallen.

Siehe Was ist <Anführer>? und Wie kann ich herausfinden, auf was <Leader> eingestellt ist? Und ist es möglich, <Anführer> neu zuzuordnen? .

Martin Tournoij
quelle
Löst mein Problem. Fügte die Zuordnung zu meinem vimrc hinzu und testete ein wenig ohne Probleme.
Mateon1
13

Ich benutze eigentlich :wincmdöfter als Ctrl+, Wweil ich es einfacher finde, die Abkürzung einzugeben :winc.

Zum Beispiel kann die äquivalent Ctrl+ W List :winc l.

user530873
quelle
7

Ich habe die folgenden Remaps in meinem eingerichtet .vimrc:

nmap <C-h> <C-w>h
nmap <C-j> <C-w>j
nmap <C-k> <C-w>k
nmap <C-l> <C-w>l

Jetzt kann ich Ctrl+hzum linken Fenster, Ctrl+lzum rechten Fenster usw. wechseln. Es scheint nur logisch mit der normalen Navigation von Vim übereinzustimmen.

Yep_It's_Me
quelle
4
Beachten Sie, dass die Zuordnung von Strg + h in einem Terminal nicht immer funktioniert, da dies häufig die Rücktaste ist. Siehe diese Antwort und diese Frage .
Martin Tournoij
Sie können auch verwenden nnoremap <cr> <c-w>w, da die Eingabetaste im normalen Modus nicht häufig verwendet wird. Dann ist es mühelos, durch die Spalten zu radeln.
Hoffe
5

Um mit Splits umzugehen, benutze ich das Submode-Plugin, das eigentlich ziemlich praktisch ist: Es erlaubt Ihnen, einen neuen Modus ("Modus" wie im normalen Modus, im visuellen Modus, im Einfügemodus usw.) zu erstellen, in dem Sie neue Tastenkombinationen definieren .

Damit musst du nicht mehr benutzen Ctrl+wund da du dich in einem neuen Modus befindest, sind alle Tasten frei zum Binden: keine Probleme mehr wie "Verdammt, ich kann keine Tastenkombination finden, die als Bedeutung dient und noch nicht zugeordnet ist "

Sie können das Plugin mit jedem normalen Plugin-Manager installieren. Hier sind einige meiner Konfigurationen, die Sie inspirieren sollen:


Ich habe einen neuen Modus erstellt, WindowsModein dem ich meine Splits manipuliere:

call submode#enter_with('WindowsMode', 'n', '', '<Leader>k', ':echo "windows mode"<CR>')
call submode#leave_with('WindowsMode', 'n', '', '<Leader>')

Diese Zeilen bedeuten, dass ich mit in den Modus eintrete Leaderkund mit den Modus verlasse Leader: Nachdem ich Leaderkalle Tasten gedrückt habe, tippe ich auf:

  • Tun Sie nichts, wenn ich in diesem Modus kein Mapping für sie definiert habe
  • Mach, was ich beschlossen habe, um sie in diesem Modus abzubilden (siehe den Rest der Antwort)
  • Gehen Sie zurück in den normalen Modus, wenn ich drücke Leader

Sobald ich in WindowsModediesen Zeilen bin , hjklnavigiere ich gerne durch die SplitsCtrl+whjkl

" Change of windows with hjkl
call submode#map('WindowsMode', 'n', '', 'j', '<C-w>j')
call submode#map('WindowsMode', 'n', '', 'k', '<C-w>k')
call submode#map('WindowsMode', 'n', '', 'h', '<C-w>h')
call submode#map('WindowsMode', 'n', '', 'l', '<C-w>l')

Ich habe diese Zeilen benutzt, um die Fenster mit /und zu teilen !:

" split windows with / and !
call submode#map('WindowsMode', 'n', '', '/', '<C-w>s')
call submode#map('WindowsMode', 'n', '', '!', '<C-w>v')

Und qschließen Sie eine Trennung:

call submode#map('WindowsMode', 'n', '', 'q', '<C-w>c')

Verschieben Sie die Splits mit Ctrlhjkl:

call submode#map('WindowsMode', 'n', '', '<C-j>', '<C-w>J')
call submode#map('WindowsMode', 'n', '', '<C-k>', '<C-w>K')
call submode#map('WindowsMode', 'n', '', '<C-h>', '<C-w>H')
call submode#map('WindowsMode', 'n', '', '<C-l>', '<C-w>L')

Der Vim-Sub-Modus ermöglicht viele leistungsstarke Funktionen. Weitere Informationen finden Sie im Dokument .


EDIT Ein weiterer Ansatz des Window submode beschrieben hier . Ich denke, die vom Autor verwendete Methode ist noch näher, um die Frage zu beantworten: Hier wird ein neuer Modus erstellt, aber alle <c-w>somethingZuordnungen sind mit denselben Schlüsseln im Untermodus verfügbar:

" Go through every letter
for key in ['a','b','c','d','e','f','g','h','i','j','k','l','m',
\           'n','o','p','q','r','s','t','u','v','w','x','y','z']
  " maps lowercase, uppercase and <C-key>
  call submode#map('window', 'n', '', key, '<C-w>' . key)
  call submode#map('window', 'n', '', toupper(key), '<C-w>' . toupper(key))
  call submode#map('window', 'n', '', '<C-' . key . '>', '<C-w>' . '<C-'.key . '>')
endfor

" Go through symbols. Sadly, '|', not supported in submode plugin.
for key in ['=','_','+','-','<','>']
  call submode#map('window', 'n', '', key, '<C-w>' . key)
endfor

Auf diese Weise alle Zuordnungen <c-w>lowerCaseKey, <c-w>upperCaseKey, <c-w><c-Key>und die Zuordnungen <c-w>=_+-<>sind alle mit im Fenstermodus ohne das Präfix<c-w>

statox
quelle