Como posso usar meu trackpad para rolagem horizontal?

10

Acabei de notar que o rolo do trackpad funciona no Vim, inércia e tudo. Eu gostaria de mudar isso para trabalhar horizontalmente - para que eu possa rolar para cima e para baixo para fazer o cursor se mover para a esquerda e para a direita, em vez de manter pressionada a tecla de seta para a direita por grandes quantidades de tempo.

Como posso mapear minha rolagem para o movimento esquerdo / direito?

Desfazer
fonte
2
Nota: se você estiver pressionando a mesma tecla de movimento mais do que algumas vezes seguidas, provavelmente estará fazendo errado (use wWeE$)}etc.) e, se estiver usando as teclas de seta, estará definitivamente usando o Vim errado.
Doorknob

Respostas:

4

De acordo com :help scroll-mouse-wheela resposta é não, se você estiver usando a GUI do Win32.

Por outro lado, usando a GUI X11 ou o console vim com suporte para mouse, a roda envia pressionamentos de teclas que você pode remapear.

Assim, você pode obter o comportamento descrito por

:nmap <ScrollWheelUp> h
:nmap <ScrollWheelDown> l

Observe que estou usando o nmapmapeamento no modo normal.

Para obter um comportamento semelhante em outros modos, você pode mapear para a direção em vez da tecla normal. Por exemplo, para o movimento do modo de inserção:

:imap <ScrollWheelUp> <Left>
:imap <ScrollWheelDown> <Right>

Para torná-los padrão, cole-os na parte inferior do seu vimrc.

John O'M.
fonte
Eu acredito que o OP está usando OSX, então nem o Win32 nem o X11 (provavelmente).
Seth
11
Existe uma resposta para o OSX?
precisa saber é o seguinte
Infelizmente, a documentação do vim não menciona o OSX e eu não tenho uma máquina OSX à mão para testá-lo. :-(
John O'M.
11
ah, eu deveria ter mencionado isso - estou executando o OS X, mas SSHing em um servidor Ubuntu na maioria das vezes.
Desfazer
Boas notícias! Se o vim na outra extremidade do ssh responder aos eventos de rolagem, o emulador de terminal está enviando os eventos de rolagem e a resposta acima deve funcionar para você, executando o vim localmente e o vim remotamente. Se você comentar com o nome do seu emulador de terminal, vou adicioná-lo à resposta.
John O'M.
4

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 scrollBindvariável para que o inspetor de teclas não seja apagado pelo coletor de lixo de Lua.

thalesmello
fonte
É um truque inteligente, usar ^ v no modo de inserção para ver as chaves enviadas! Também tive problemas para encontrar documentação, mas não tenho um PC (e mouse com roda). Estou tentando simular uma roda com uma tela de toque. Gostaria de saber se você também descobriu as teclas da roda de rolagem horizontal. Eu esperava que eles fossem 66/67 (depois de 64/65 para cima / baixo), e eles deveriam ser números de botão 6/7, mas não parece estar funcionando. Obrigado!
hyperpallium
2

Se você usa o MacVim no OS X, isso funcionará com um trackpad:

set mouse=n " enable mouse in normal mode
set nowrap  " disable line wrapping (so there's something to scroll to)
David Lord
fonte
Estou ciente de que a situação do OP é diferente, mas esta é uma resposta válida para alguns usuários.
David Lord