Wie ordne ich die Eingabe dem benutzerdefinierten Befehl EXCEPT in der Schnellkorrektur zu?

9

Ich habe neu zugeordnet <cr>(eingegeben), zadamit ich Falten schnell öffnen / schließen kann.

Wenn ich jetzt jedoch das Quickfix-Fenster verwende und die Eingabetaste drücke, springt es nicht mehr zur Zeile mit dem Fehler (weil versucht wird, eine Falte zu öffnen / schließen, die im Quickfix-Fenster nicht vorhanden ist).

Gibt es eine Möglichkeit, mein Mapping zu deaktivieren oder lokal zurückzusetzen, wenn Sie ein Quickfix-Fenster aufrufen?

Kunstroboter
quelle

Antworten:

13

Die Verwendung einer Ausdruckszuordnung ist der einfachste Weg, dies zu tun:

nnoremap <expr> <CR> &buftype ==# 'quickfix' ? "\<CR>" : 'za'

Dies definiert eine Zuordnung, die prüft, ob Sie sich im Quickfix-Fenster befinden, und dann entweder a <CR>oder zaentsprechend ausführt .

Sehen:

  • :h :map-expr
  • :h 'buftype'
  • :h expr1
  • :h string

Zuordnung zu einer Funktion

Sie können auch eine Funktion definieren, die beim Aufrufen über das Quickfix-Fenster eine reguläre Eingabe ausführt und ansonsten 'za' ausführt. Dies ist für das, was Sie versuchen, nicht effizient, aber ich lasse es hier, weil es nützliche Informationen für den Fall ist, dass Sie etwas Komplizierteres als einen normalen Modusbefehl zuordnen möchten:

function! FoldingEnter()
  if &buftype ==# 'quickfix'
    execute "normal! \<CR>"
  else
    normal! za
  endif
endfunction

nnoremap <CR> :call FoldingEnter()<CR>
Reich
quelle
Darf ich fragen , warum wir verwenden müssen , \<in "<CR>" here?
Voldikss
2
@Voldikss Wir möchten, dass die Zeichenfolge ein einzelnes Wagenrücklaufzeichen enthält. Es gibt zwei Möglichkeiten, um dies zu erreichen: Entweder können wir drücken <C-V><C-M>, um den Wagenrücklauf buchstäblich einzugeben, aber dies wird als ^Maußerhalb von Vim angezeigt und kann nicht einfach kopiert / eingefügt werden, oder wir können die String-Konstanten-Notation von Vim verwenden. (Siehe :help expr-string.) Wenn wir den Backslash nicht einfügen "<CR>"würden, würde die Zeichenfolge stattdessen die Reihe von vier Zeichen enthalten: kleiner als, Großbuchstabe C, Großbuchstabe R, größer als.
Rich
1
Danke Mann, ich verstehe es jetzt. :help expr-stringist wichtig.
Voldikss