Como mapear Enter para o comando personalizado EXCEPT em correção rápida?

9

Eu remapeei <cr>(enter) para zaque eu possa abrir / fechar dobras rapidamente.

No entanto, agora, quando uso a janela do quickfix e pressiono enter, ele não pula mais para a linha com o erro (porque está tentando abrir / fechar uma dobra que não existe na janela do quick fix).

Existe uma maneira de desativar meu mapeamento ou redefini-lo localmente ao entrar em uma janela do quickfix?

artfulrobot
fonte

Respostas:

13

Usar um mapeamento de expressão é a maneira mais fácil de fazer isso:

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

Isso define um mapeamento que verifica se você está na janela do quickfix e, em seguida, executa um <CR>ou de zaacordo.

Vejo:

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

Mapeando para uma Função

Você também pode definir uma função que realiza uma entrada regular quando chamada da janela do quickfix e, em caso contrário, 'za'. Isso não é eficiente para o que você está tentando fazer, mas estou deixando aqui porque são informações úteis para se você deseja mapear para algo mais complicado do que um comando no modo normal:

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

nnoremap <CR> :call FoldingEnter()<CR>
Rico
fonte
Posso perguntar por que devemos usar \<em "<CR>" here?
voldikss
2
@Voldikss Queremos que a string contenha um único caractere de retorno de carro. Existem duas maneiras de conseguir isso: ou podemos pressionar <C-V><C-M>para inserir o retorno de carro literalmente, mas isso é exibido como ^Me não pode ser facilmente copiado / colado fora do Vim, ou podemos usar a notação constante de string do Vim. (Consulte :help expr-string.) Se não incluíssemos a barra invertida "<CR>", a sequência conteria a série de quatro caracteres: menor que, C maiúsculo, R maiúsculo, maior que.
26519 Rich
11
Obrigado cara, eu entendo agora. :help expr-stringé importante.
22419 voldikss