Bagaimana saya bisa menggunakan trackpad untuk menggulir horizontal?

10

Saya hanya memperhatikan bahwa scroll trackpad saya berfungsi di Vim, inersia, dan semuanya. Saya ingin mengubah ini agar berfungsi secara horizontal - jadi saya dapat menggulir ke atas dan ke bawah untuk membuat kursor bergerak ke kiri dan ke kanan alih-alih menahan tombol panah kanan untuk waktu yang sangat lama.

Bagaimana saya bisa memetakan gulir ke gerakan kiri / kanan?

Batalkan
sumber
2
Sidenote: jika Anda menekan tombol gerakan yang sama lebih dari beberapa kali berturut-turut, Anda mungkin melakukan kesalahan (gunakan wWeE$)}dll.), Dan jika Anda menggunakan tombol panah, Anda pasti menggunakan Vim yang salah.
Gagang pintu

Jawaban:

4

Menurut :help scroll-mouse-wheeljawabannya tidak jika Anda menggunakan Win32 GUI.

Di sisi lain, menggunakan X11 GUI atau konsol vim dengan dukungan mouse, roda mengirimkan penekanan tombol yang dapat Anda remap.

Jadi, Anda bisa mendapatkan perilaku yang Anda uraikan

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

Perhatikan bahwa saya menggunakan nmapuntuk memetakan dalam mode normal.

Untuk mendapatkan perilaku serupa di mode lain, Anda dapat memetakan ke arah alih-alih tombol normal. Misalnya untuk gerakan mode memasukkan:

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

Untuk menjadikannya default, tempelkan di bagian bawah vimrc Anda.

John O'M.
sumber
Saya percaya OP menggunakan OSX, jadi baik Win32 maupun X11 (kemungkinan besar).
Seth
1
Apakah ada jawaban untuk OSX?
bsmith89
Sayangnya, dokumentasi vim tidak menyebutkan OSX dan saya tidak memiliki mesin OSX yang dapat digunakan untuk mencobanya. :-(
John O'M.
1
ah, saya seharusnya menyebutkan ini - saya menjalankan OS X, tetapi SSHing menjadi server Ubuntu sebagian besar waktu.
Undo
Itu kabar baik! Jika vim di ujung ssh merespons acara gulir, maka emulator terminal Anda mengirimkan acara gulir dan jawaban di atas akan bekerja untuk Anda, keduanya menjalankan vim secara lokal dan menjalankan vim dari jarak jauh. Jika Anda berkomentar dengan nama emulator terminal Anda, saya akan menambahkannya ke jawabannya.
John O'M.
4

Saya menemukan cara untuk melakukan itu dengan Hammerspoon dan penggunaan pemetaan yang cerdas.

Bagian pertama adalah mengkonfigurasi Shift+ ScrollUpdan Shift+ ScrollDownuntuk menggulir secara horizontal. Untuk melakukan itu, Anda telah memasukkan potongan kode berikut di .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>

Perhatikan bahwa kita harus menggunakan <S-2-ScrollWheelUp>dan sejenisnya karena mereka juga dikirim sebagai kunci ke terminal. Saya tidak menemukan dokumentasi tentang ini (saya menemukan ini dengan menggunakan Ctrl+ Vsaat menggulir dalam mode insert).

Setelah itu, kita harus memetakan kembali gulungan horizontal menjadi Shift+ gulungan vertikal. Untuk melakukannya, kami menempatkan cuplikan berikut di Hammerspoon'sinit.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

Kami membuat scrollBindvariabel agar pengamat tombol tidak terhapus oleh pengumpul sampah Lua.

thalesmello
sumber
Itu trik yang cerdas, untuk menggunakan ^ v dalam mode insert untuk melihat kunci yang dikirim! Saya juga kesulitan menemukan dokumentasi, tetapi tidak memiliki PC (dan mouse roda). Saya mencoba mensimulasikan roda dengan layar sentuh. Saya ingin tahu apakah Anda juga menemukan kunci untuk roda gulir horizontal. Saya berharap mereka menjadi 66/67 (setelah 64/65 untuk atas / bawah), dan mereka dimaksudkan untuk menjadi tombol angka 6/7, tetapi tampaknya tidak berfungsi. Terima kasih!
hyperpallium
2

Jika Anda menggunakan MacVim pada OS X, ini akan berfungsi dengan trackpad:

set mouse=n " enable mouse in normal mode
set nowrap  " disable line wrapping (so there's something to scroll to)
David Lord
sumber
Saya menyadari bahwa situasi OP berbeda, tetapi ini adalah jawaban yang valid untuk beberapa pengguna.
David Lord