如何在 vim 中为不同类型的缓冲区映射不同的键

Yog*_*ora 5 vim

我面临的问题是我已经映射了一些键和鼠标事件,以便在编辑文件时在 vim 中进行搜索。但是如果quickfix 缓冲区,这些映射会影响功能。

我想知道是否可以根据使用它们的缓冲区来映射键。

EDIT- 我正在为这个问题添加更多信息让我们考虑一个场景。我想映射<C-F4>以关闭缓冲区/窗口。现在这种行为可能取决于很多事情。

如果我正在编辑缓冲区,它应该关闭该缓冲区而不更改窗口的布局。我正在为此使用buffkil插件。

它不取决于文件的扩展名,而是取决于缓冲区的类型。我在 vim 文档中看到有未列出和列出的缓冲区。所以如果它被列出缓冲区,它应该使用 bufkill 命令关闭。

如果它不是列出的缓冲区,则应使用<c-w>c命令关闭缓冲区并更改窗口布局。

我是编写 vim 函数/脚本的新手,有人能帮我开始这个吗

ZyX*_*ZyX 5

function KillBuffer()
    if &buflisted
         " bufkill command here
    else
         execute "normal! \<C-w>c"
    endif
endfunction
noremap <C-F4> :call KillBuffer()<CR>
Run Code Online (Sandbox Code Playgroud)

把它放在你的 .vimrc 或者,如果你想将 quickfix 窗口作为未列出的缓冲区处理(在我的 Vim 中它被列出):

function KillBuffer()
    if &buflisted && !&filetype=="qf"
         " bufkill command here
    else
         execute "normal! \<C-w>c"
    endif
endfunction
noremap <C-F4> :call KillBuffer()<CR>
Run Code Online (Sandbox Code Playgroud)

根据手册,您可以在上述脚本中替换execute "normal! \<C-w>c"为更简单close!的。