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

hha*_*amu 3 vim directory

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

我的 hjkl 键被重新映射如下:

noremap d h
noremap h gj
noremap t gk
noremap n l
noremap e d
noremap l n
Run Code Online (Sandbox Code Playgroud)

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

lor*_*nix 12

恐怕我不明白。

[在我找出根本原因之前删除了我胡言乱语的一些乱七八糟的东西]

你想达到什么目的?反正你的 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
Run Code Online (Sandbox Code Playgroud)

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

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