ฉันจะใช้ trackpad ในการเลื่อนในแนวนอนได้อย่างไร?


10

ฉันเพิ่งสังเกตเห็นว่าการเลื่อนแทร็คแพดของฉันทำงานใน Vim, ความเฉื่อยและทั้งหมด ฉันต้องการเปลี่ยนการทำงานในแนวนอน - ดังนั้นฉันสามารถเลื่อนขึ้นและลงเพื่อให้เคอร์เซอร์เลื่อนไปทางซ้ายและขวาแทนที่จะกดปุ่มลูกศรขวาค้างไว้เป็นเวลานาน

ฉันจะแมปการเลื่อนไปทางซ้าย / ขวาของฉันได้อย่างไร


2
Sidenote: ถ้าคุณกดปุ่มเคลื่อนไหวเดียวกันมากกว่าไม่กี่ครั้งในแถวที่คุณอาจทำมันผิด (ใช้wWeE$)}ฯลฯ ) และถ้าคุณกำลังใช้ปุ่มลูกศรคุณแน่นอนใช้เป็นกลุ่มที่ไม่ถูกต้อง
Doorknob

คำตอบ:


4

ตาม:help scroll-mouse-wheelคำตอบคือไม่ถ้าคุณใช้ Win32 GUI

ในทางกลับกันการใช้ X11 GUI หรือคอนโซลเป็นกลุ่มด้วยการรองรับเมาส์ล้อจะส่งการกดปุ่มที่คุณสามารถทำการแมปใหม่ได้

ดังนั้นคุณสามารถรับพฤติกรรมที่คุณอธิบายได้

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

โปรดทราบว่าฉันใช้nmapสำหรับการทำแผนที่ในโหมดปกติ

ในการรับพฤติกรรมที่คล้ายกันในโหมดอื่นคุณสามารถแมปไปยังทิศทางได้แทนที่จะใช้ปุ่มปกติ เช่นสำหรับการเคลื่อนที่โหมดแทรก:

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

หากต้องการเริ่มต้นให้ติดที่ด้านล่างของ vimrc ของคุณ


ฉันเชื่อว่า OP ใช้ OSX ดังนั้นทั้ง Win32 และ X11 (น่าจะเป็นไปได้มากที่สุด)
เซท

1
มีคำตอบสำหรับ OSX หรือไม่?
bsmith89

อนิจจา, เอกสาร vim ไม่ได้พูดถึง OSX และฉันไม่มีเครื่อง OSX ที่สะดวกในการลองใช้ :-(
John O'M.

1
อ่าฉันควรพูดถึงเรื่องนี้ - ฉันใช้ OS X แต่ SSHing เป็นเซิร์ฟเวอร์ Ubuntu ส่วนใหญ่
เลิกทำ

นั่นเป็นข่าวดี! ถ้าเป็นกลุ่มในส่วนอื่น ๆ ของ ssh ตอบสนองต่อเหตุการณ์เลื่อนแล้วเทอร์มินัลอีมูเลเตอร์ของคุณกำลังส่งเหตุการณ์เลื่อนผ่านและคำตอบข้างต้นควรใช้งานได้ดีสำหรับคุณ หากคุณแสดงความคิดเห็นด้วยชื่อของเทอร์มินัลอีมูเลเตอร์ของคุณฉันจะเพิ่มลงในคำตอบ
John O'M

4

ฉันคิดหาวิธีที่จะทำเช่นนั้นกับ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'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

เราสร้างscrollBindตัวแปรเพื่อที่ผู้ติดตามการกดแป้นพิมพ์จะไม่ถูกลบโดยตัวเก็บขยะของ Lua


นั่นเป็นกลอุบายที่ชาญฉลาดในการใช้ ^ v ในโหมดแทรกเพื่อดูกุญแจที่ส่งไป! ฉันยังมีปัญหาในการค้นหาเอกสาร แต่ไม่มีพีซี (และล้อเมาส์) ฉันพยายามจำลองวงล้อด้วยหน้าจอสัมผัส ฉันสงสัยว่าคุณบังเอิญค้นพบกุญแจสำหรับล้อเลื่อนแนวนอนด้วยหรือไม่ ฉันคาดว่าพวกเขาจะเป็น 66/67 (หลังจาก 64/65 สำหรับขึ้น / ลง) และพวกเขาตั้งใจจะเป็นปุ่มหมายเลข 6/7 แต่ดูเหมือนจะไม่ทำงาน ขอบคุณ!
hyperpallium

2

หากคุณใช้ MacVim บน OS X สิ่งนี้จะทำงานกับ trackpad:

set mouse=n " enable mouse in normal mode
set nowrap  " disable line wrapping (so there's something to scroll to)

ฉันรู้ว่าสถานการณ์ของ OP นั้นแตกต่างกัน แต่นี่เป็นคำตอบที่ถูกต้องสำหรับผู้ใช้บางคน
David Lord
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.