Eu descobri uma maneira de fazer isso com Hammerspoon
e o uso inteligente de mapeamento.
A primeira parte está configurando Shift+ ScrollUpe
Shift+ ScrollDownpara rolar horizontalmente. Para fazer isso, você colocou o seguinte snippet de código no seu .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>
Note que temos que usar <S-2-ScrollWheelUp>
e afins, porque eles também são enviados como chaves para o terminal. Não encontrei nenhuma documentação sobre isso (descobri isso usando
Ctrl+ Venquanto rolava no modo de inserção).
Depois disso, temos que remapear os pergaminhos horizontais para Shift+ os verticais. Para fazer isso, colocamos o seguinte snippet em Hammerspooninit.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
Criamos a scrollBind
variável para que o inspetor de teclas não seja apagado pelo coletor de lixo de Lua.
wWeE$)}
etc.) e, se estiver usando as teclas de seta, estará definitivamente usando o Vim errado.