重新映射 vim 的“目录视图”中的键

重新映射 vim 的“目录视图”中的键

通过在 vim 中打开目录(例如:e .)获得的“Netrw 目录列表”似乎使用与普通 vim 不同的一组键绑定进行导航

我的 hjkl 键已重新映射:

noremap d h
noremap h gj
noremap t gk
noremap n l
noremap e d
noremap l n

但是,当我在目录列表中按“t”(又名向上箭头)时,它实际上打开光标下的文件,而不是向上打开。在这种目录列表模式下如何实现类似的按键映射?

答案1

恐怕我听不懂。

[删除了我在找出根本原因之前胡言乱语的一些内容]

你想达到什么目的?无论如何,你的 noremap 列表对我来说没有意义。

啊哈!知道了!

您正在使用一个DVORAK 键盘布局,不是吗?现在映射开始有意义了。 (忘了提及...不是吗!)

查看 NETRW 插件的源代码,看起来 netrw 缓冲区正在设置 BUFFER ONLY nnoremaps...当然,它会覆盖您的缓冲区。我正在寻找解决方案。

据我所知,您必须对 $VIMRUNTIME/autoload/netrw.vim 文件进行一些大手术,这将使升级变得很痛苦,并且会将 netrw 映射喷洒在干净的地板上。但另一个想法让我震惊:

netrw 插件在打开缓冲区时将文件类型设置为“netrw”,因此您可以在 .vimrc 中设置自动命令,以根据 netrw 窗口中的需要设置所需的键转换。

augroup netrw_dvorak_fix
    autocmd!
    autocmd filetype netrw call Fix_netrw_maps_for_dvorak()
augroup END
function! Fix_netrw_maps_for_dvorak()
    noremap <buffer> d h
    noremap <buffer> h gj
    noremap <buffer> t gk
    noremap <buffer> n l
    noremap <buffer> e d
    noremap <buffer> l n
    " and any others...
endfunction

由于无法连接地图命令,因此必须这样做。应该为你工作。

我想如果您始终使用 dvorak noremap,那么您可以删除 <buffer> 修饰符。

答案2

如今,一个更简单的解决方案是将映射放入.vim/after/ftplugin/netrw.vim

    noremap <buffer> d h
    noremap <buffer> h gj
    noremap <buffer> t gk
    noremap <buffer> n l
    noremap <buffer> e d
    noremap <buffer> l n

你需要<buffer>lornix解释的原因。

相关内容