2016-05-21 10 views
2

Ich bin sehr neu zu vim und es gibt mehrere Dinge, die ich nicht arbeiten kann.vim mapping keys + listchars

1) LISTCHARS. Ich richte vim so ein, dass Punkte an nachstehende Leerzeichen gesetzt werden, aber ich möchte, dass vim Leerzeichen durch Punkte in Dateien ersetzt, weil vim jetzt Punkte nur nach den letzten Wörtern am Zeilenende speichert. Außerdem möchte ich, dass vim ein> -Zeichen an den Anfang der aktuellen Zeile setzt und etwas anstelle von TABs einfügt.

2) Wie kann ich Standard-Tastenbelegungen überschreiben? Zum Beispiel, wenn Vim hat seine eigene Bindung [Ctrl + A] etwas zu tun, und ich möchte Shift + T das gleiche tun - was soll ich tun? Eine Erweiterung dieser Frage: Standardmäßig bewegt sich zwischen geteilten Fenstern in vim eine Bindung [CTRL+W, arrow] (es ist wie zwei konsistente Klicks). Wie kann ich das übersteuern? Ich möchte alt + arr statt [ctrl+w, arrow] verwenden.

3) Ich tat

nmap <C-Space> :NERDTreeToggle<CR> 

die Seitenleiste zu wechseln, aber es funktioniert nicht. Ich lese ist nicht einfach zu überschreiben, aber ich möchte es immer noch verwenden, um die Sidebar umzuschalten.

Antwort

0

1) Wenn Sie die vim help on 'listchars' lesen, werden Sie sehen, dass es eine trail:c Option bietet, die verwendet werden können, um c Räume mit einem benutzerdefinierten Zeichen zu markieren Hinter. Ich nehme an, das ist die Option, die Sie gerade verwenden. Glücklicherweise unterstützt patch 7.4.711 (siehe auch changelog) 'listchars' jetzt eine space:c Option, mit der alle Leerzeichen mit einem Zeichen c markiert werden können. So können Sie das verwenden, wenn Ihre Version von vim neu genug ist. (Beachten Sie, dass die Online-vim Hilfe-Seite ich gerade verbunden scheint im Moment ein bisschen out-of-date zu sein, damit es nicht erwähnen die space:c Option.) Zum Beispiel:

:set lcs+=space:. 

Hinsichtlich Putting > am Anfang der aktuellen Zeile, ich glaube, das ist nicht möglich. Ich fürchte also, du hast kein Glück, außer jemand anders kennt einen Trick, den ich nicht kenne.

Schließlich können Sie die Option tab:xy verwenden, um etwas anstelle von Registerkarten zu setzen. Ich mag tatsächlich ein paar von Unicode-Zeichen für diesen Einsatz:

:set lcs+=tab:•· 

2) Was Sie suchen hier ist mapping. Sie sollten beachten, dass "Shift + T" eigentlich nur Großbuchstabe T ist, da das Verschieben eines Buchstabenschlüssels die Kapitalvariante des Buchstabens auf allen modernen Computern sendet. So können Sie tun, was Sie mit diesem wollen:

nmap T <C-a> 

Diese up T gesetzt wird die Nummer unter dem Cursor zu erhöhen, die die normale Funktion von ist^a.

Schließlich kann dies in Bezug auf die Zuordnung von alt-modifizierten Pfeiltasten schwierig sein, weil es davon abhängt, auf welcher Plattform Sie vim laufen, z. ob Sie gvim unter Windows oder ein Terminal auf einer Unix-Plattform ausführen.Wenn gvim, können Sie die einfachen <M-...> Codes verwenden:

nmap <M-Left> <C-w>h 
nmap <M-Down> <C-w>j 
nmap <M-Up> <C-w>k 
nmap <M-Right> <C-w>l 

Aber auf anderen Plattformen, werden Sie die Escape-Sequenzen herauszufinden, müssen die versandt werden können, wenn eine Meta-modifizierten Pfeiltaste, und ordnen diese. Zum Beispiel, wenn ich Cygwin vim in mintty unter Windows ausführen, kann ich diese verwenden:

nmap <Esc>[1;3D <C-w>h 
nmap <Esc>[1;3B <C-w>j 
nmap <Esc>[1;3A <C-w>k 
nmap <Esc>[1;3C <C-w>l 

sollten Sie in der Lage sein, die Escape-Sequenzen durch eine Tastenkombination in einem Puffer durch Eingabe Insert-Modus geschickt, um herauszufinden (oder Befehl -line-Modus sollte auch funktionieren), drücken Sie ^v, und drücken Sie dann die Tastenkombination. Die eingefügten Zeichen sind die Escape-Sequenz, die von der Tastenkombination gesendet wird.

3) Ich habe noch nie zuvor das NERD-Tree-Plugin benutzt oder versucht, Control-Space zu mappen, damit ich nicht mit diesem sprechen kann. Vielleicht könnten Sie eine neue Frage stellen, die sich auf dieses Thema konzentriert.

+0

zuordnen Ich habe bereits versucht, lcs wie Sie angeboten, be4 Ich schrieb dieses Problem. das war was in meinem .vimrc ":" listchars set list set lcs = trail: · set lcs + = raum: · set lcs + = tab: →→ set listchars = eol: ¬ das hat nicht funktioniert. nur EOL hat gearbeitet und etwa 2) in erhabenen Text oder Atom ist es einfach, Tastaturkürzel zu schreiben. zum Beispiel in erhabenem Text gibt es eine Syntax für doppelte Tastaturkürzel ["ctrl + k", "ctrl + b"], um die Seitenleiste umzuschalten.Welche Syntax gibt es in vim für doppelte Tastaturbelegung? zum Beispiel für C-W + Pfeil wäre es ? – Max

+0

1) Meine Hypothese ist, dass Sie die Einstellungen 'set lcs + = space: c' und 'set lcs + = tab: xy 'überschreiben, wenn Sie die Einstellung' set listchars = eol: c 'ausführen. Beachten Sie, dass die vorherigen beiden Einstellungen '+ =' verwenden, während die letzte Einstellung '=' ohne das Pluszeichen verwendet. Das überschreibt alle vorherigen Einstellungen. Sie müssen es in '+ =' ändern, damit die vorherigen Einstellungen wirksam bleiben. 2) Korrigieren. – bgoldst

+0

Du hattest recht, mein Eol hat die vorherigen Lcs übertroffen. aber aber lcs + = tab • ·. oder lcs + = tab: →→. funktioniert nicht. Ich habe sogar versucht, alle anderen lcs zu löschen, und nur eins mit Tab übrig - es hat nicht funktioniert. und wie kann ich setzen> - am Anfang der Zeile, wo ich gerade bin? – Max

0

1)

Wenn du gerade getan hat:

set listchars=... 

das wird nicht funktionieren, weil Sie auch auf der Liste Option schalten muss:

set list 

Ich habe Ihr Problem falsch gelesen. Sie sollten trail:. wie bgoldst empfohlen verwenden.

2)

Zunächst müssen Sie entscheiden, wie Sie die Neuzuordnung wollen, zu arbeiten, da Remaps sind modal, z.B. Sie arbeiten in bestimmten Modi. Wenn Sie beispielsweise <shift-t> im normalen Modus <C-a> entsprechen möchten, müssen Sie nnoremap tun.

nnoremap T <C-a> 

Sie können dies auch für die visuelle tun, einfügen oder Befehlsmodus mit

vnoremap 
inoremap 
cnoremap 

Empfohlene Lektüre: What is the difference between the remap, noremap, nnoremap and vnoremap mapping commands in vim?

3)

<C-space> zu einem echten ASCII-Zeichen Karte nicht es ist schwer zu kartieren. Sie können es jedoch immer noch tun. Einfügemodus und geben

<C-v><C-space> 

(Strg + V dann Strg + Leertaste) Damit wird der Wert legen, dass vim sieht, wenn Sie Strg + Leertaste drücken. Höchstwahrscheinlich werden Sie ^@, z.B. ein Nullbyte. Wenn dies der Fall ist, können Sie ctrl + space mit

nnoremap <NUL> :NERDTreeToggle<CR> 
+0

so über 3) Was muss ich genau in vimrc setzen? nnoremap : NERDTreeToggle diese zwei Zeilen nach was Strg-v + Strg-Leerzeichen würde Sidebar umschalten? – Max

+0

@Max Nein, Lassen Sie uns sehen, was Vim sieht, wenn Sie drücken. Wenn man einen '^ @' eingibt (was höchstwahrscheinlich der Fall ist), dann sieht vim ein Byte, also kann man 'nnoremap : NERDTreeToggle ' – DJMcMayhem

+0

und ich habe versucht Set-Liste dann auf nächste Zeile set lcs + = tab: • · Wie bgoldst angeboten - das hat nicht funktioniert. – Max