![重新映射 vim 的“目录视图”中的键](https://linux22.com/image/20865/%E9%87%8D%E6%96%B0%E6%98%A0%E5%B0%84%20vim%20%E7%9A%84%E2%80%9C%E7%9B%AE%E5%BD%95%E8%A7%86%E5%9B%BE%E2%80%9D%E4%B8%AD%E7%9A%84%E9%94%AE.png)
通过在 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解释的原因。