Answers:
根据:help scroll-mouse-wheel
答案,如果您使用的是Win32 GUI,则为否。
另一方面,使用X11 GUI或带有鼠标支持的console vim,滚轮会发送按键,您可以重新映射。
因此,您可以获得您描述的行为
:nmap <ScrollWheelUp> h
:nmap <ScrollWheelDown> l
请注意,我nmap
在正常模式下用于映射。
要在其他模式下获得类似的行为,可以映射到方向而不是普通键。例如,插入模式移动:
:imap <ScrollWheelUp> <Left>
:imap <ScrollWheelDown> <Right>
要使它们成为默认值,请将它们粘贴在vimrc的底部。
我想出了一种使用Hammerspoon 并巧妙地使用映射的方法。
第一部分是配置Shift+ ScrollUp和
Shift+ ScrollDown以水平滚动。为此,您将以下代码片段放入.vimrc
:
nnoremap <S-ScrollWheelUp> <ScrollWheelLeft>
nnoremap <S-2-ScrollWheelUp> <2-ScrollWheelLeft>
nnoremap <S-3-ScrollWheelUp> <3-ScrollWheelLeft>
nnoremap <S-4-ScrollWheelUp> <4-ScrollWheelLeft>
nnoremap <S-ScrollWheelDown> <ScrollWheelRight>
nnoremap <S-2-ScrollWheelDown> <2-ScrollWheelRight>
nnoremap <S-3-ScrollWheelDown> <3-ScrollWheelRight>
nnoremap <S-4-ScrollWheelDown> <4-ScrollWheelRight>
注意,我们必须使用<S-2-ScrollWheelUp>
之类的,因为它们也作为键发送到终端。我没有找到任何有关此文档的信息(在插入模式下滚动时,我使用Ctrl+ 弄清了
V)。
之后,我们必须将水平滚动重新映射为Shift+垂直滚动。为此,我们将以下代码段放入Hammerspoon的init.lua
scrollBind = hs.eventtap.new({hs.eventtap.event.types.scrollWheel}, function(e)
if is_active('iTerm2') then
local horizontalOffset = e:getProperty(hs.eventtap.event.properties.scrollWheelEventDeltaAxis2)
if horizontalOffset ~= 0 then
hs.eventtap.scrollWheel({ 0, horizontalOffset }, {"shift"}, 'pixel')
return true
end
end
return false
end):start()
function is_active(program_name)
local active_window_name = hs.window.focusedWindow():application():name()
return active_window_name == program_name
end
我们创建scrollBind
变量只是为了使Lua的垃圾收集器不会删除按键观察器。
wWeE$)}
等),如果您使用箭头键,则肯定是在使用Vim。