เป็นกลุ่มใน OSX: วิธีทำ page-up / page-down / ไปที่ EOL ผ่านไฟล์ vim ที่เปิดใน terminal?


28

ในสีโป๊วซึ่งเป็นวิธีที่ฉันใช้ VIM เป็นหลักฉันสามารถทำสิ่งต่อไปนี้ได้:

  • Page up / down: การใช้ปุ่ม Page up / down แบบเนทีฟ ใน Mac ทางเลือกคือ Fn + ขึ้น / ลงซึ่งไม่ทำงานใน terminal (ไม่เลื่อนภายในไฟล์ vim แต่เลื่อนเทอร์มินัลบัฟเฟอร์)
  • ในทำนองเดียวกันปุ่ม Fn + ขวา / ซ้ายไม่ได้พาฉันไปที่จุดเริ่มต้น / สิ้นสุดของบรรทัด

ฉันจะเลียนแบบฟังก์ชันการทำงานนี้ใน Mac OS X ได้อย่างไร


มันสามารถช่วยชี้แจงคำถามของคุณหากคุณเปลี่ยนหรือเพิ่ม "Fn + ขวา / ซ้าย" ด้วย "Home / End" ซึ่งเป็นสิ่งที่ Fn รวมกันทำ
Chris หน้า

คำตอบ:


48

นี่ไม่ใช่คำถาม mac โดยเฉพาะนี่เป็นคำถาม vi

ในโหมดนำทาง ctrl-f เลื่อนหน้าลงและ ctrl-b เลื่อนหน้าขึ้น (คิดว่า "F" ขึ้นไปและ "B" ack) Ctrl-d เลื่อนลงครึ่งหน้าและ ctrl-u เลื่อนขึ้นครึ่งหน้า

^ นำคุณไปยังจุดเริ่มต้นของบรรทัดและ $ ไปยังจุดสิ้นสุด ฉันรู้ฉันรู้ แต่มีเหตุผลทางประวัติศาสตร์สำหรับสิ่งนั้น

นี่คือสูตรโกงที่ดีจริงๆในการควบคุม vi vi เป็นความลับเล็ก ๆ น้อย ๆ แต่เมื่อคุณทำให้เป็นภายในมันเป็นโปรแกรมแก้ไขข้อความที่เร็วและลื่นที่สุดในโลก


1
"นี่ไม่ใช่คำถาม mac โดยเฉพาะนี่เป็นคำถาม vi" ส่วนใหญ่เกี่ยวกับวิธีตั้งค่าคีย์แมปของแอปพลิเคชัน Mac OS X Terminal แต่ปรากฎว่าส่วนที่สองของคำถามเกี่ยวกับการเริ่มต้น / สิ้นสุดของบรรทัดมีการแมปในเทอร์มินัลแล้วและวิธีหนึ่งที่เป็นไปได้คือการแก้ไขแผนที่ของ vi เข้าใจมัน. อีกทางเลือกหนึ่งคือสามารถแก้ไขแผนผังแผนที่เทอร์มินัลได้
Chris หน้า

16

แผนผังการกำหนดค่าเริ่มต้นของเทอร์มินัลShift- Page UpและShift- Page Downไปยังลำดับอักขระที่บอกโปรแกรมเช่น Vim และ Emacs เพื่อเลื่อน ( ESC [ 5 ~และESC [ 6 ~)

หากคุณต้องการให้ปุ่มเหล่านี้ส่งลำดับอักขระไปยังเทอร์มินัลโดยไม่มีShiftตัวแก้ไขคุณสามารถปรับแต่งการแมปคีย์บอร์ด:

เทอร์มินัล> ค่ากำหนด> การตั้งค่า> [โปรไฟล์]> คีย์บอร์ด

หากคุณทำเช่นนี้ฉันขอแนะนำให้คุณกลับความหมายของShiftตัวดัดแปลงสำหรับคีย์เหล่านี้โดยการสลับการแมปสำหรับคีย์ที่เลื่อนและไม่เปลี่ยนเพื่อให้พฤติกรรมทางเลือกยังคงมีอยู่ นอกจากนี้ให้ดูเมนูมุมมองซึ่งมีคำสั่งเลื่อนที่ใช้Commandตัวปรับเปลี่ยนเพื่อให้พร้อมใช้งานโดยไม่คำนึงถึงแผนผังแป้นพิมพ์เทอร์มินัล

ในทำนองเดียวกันShift- HomeและShift- Endถูกแมปเพื่อย้ายไปยังจุดเริ่มต้น / สิ้นสุดของบรรทัดปัจจุบัน ( ESC [ HและESC [ F) ลำดับเหล่านี้เป็นที่เข้าใจกันโดย Bash แต่คุณอาจต้องปรับแต่ง Vim ให้เข้าใจหรือแก้ไขการแม็พเฉพาะสำหรับ Vim Vim, Emacs และโปรแกรมอื่น ๆ บางโปรแกรมส่งลำดับ escape เพื่อนำเทอร์มินัลไปที่ "Application Cursor Mode" โดยที่ปุ่ม Home / End ส่งESC O HและESC O Fแต่ Terminal (ตั้งแต่ 10.9) ไม่ได้ใช้พฤติกรรมนี้ ดังนั้นคุณอาจต้องการเปลี่ยนแผนที่แป้นพิมพ์เพื่อส่งรหัสอื่น ๆ เหล่านี้แทน (Bash เข้าใจพวกเขาด้วย) (บนระบบปฏิบัติการอื่นHomeและEndใช้สำหรับการเริ่มต้น / สิ้นสุดบรรทัดดังนั้นเทอร์มินัลจึงมีShiftตัวปรับให้สมมาตร)

Control- Left ArrowและControl- Right Arrowนอกจากนี้ยังมีแมปไป "ย้ายไปเริ่มต้น / ปลายสาย" ลำดับโดยค่าเริ่มต้น แต่พวกเขากำลังที่แตกต่างจากคนที่แมปไปShift- Homeและ-Shift Endแต่พวกเขากำลังแมปไป Emacs- และทุบตีได้ลำดับและESC [ 5 D ESC [ 5 Cสมมติว่าสิ่งเหล่านี้ไม่ได้ใช้งานโดย Vim วิธีที่ง่ายที่สุดคือการปรับแต่ง Vim ให้ยอมรับสิ่งเหล่านี้โดยใช้ ~ / .vimrc

โปรดทราบว่าใน macOS เวอร์ชันที่ใหม่กว่าเทอร์มินัลจะไม่มีการแมปที่ชัดเจนสำหรับHomeและEndในการตั้งค่าตามค่าเริ่มต้น แต่จะมีลักษณะการทำงานแบบไดนามิกที่ปุ่มจะแมปโดยอัตโนมัติเพื่อเริ่ม / สิ้นสุดบรรทัดเมื่อหน้าจอทางเลือกทำงานเช่นเมื่อใช้แอปพลิเคชันแบบเต็มหน้าจอเช่น emacs, vim, หน้าจอหรือ tmux เมื่อใช้โปรแกรม line-oriented เช่นเชลล์บนหน้าจอหลักพวกเขายังคงเลื่อนมุมมองเทอร์มินัลตามค่าเริ่มต้น โมดิShiftฟายเออร์ inverted พฤติกรรม


@ MarkHu ฉันพูดถึงเรื่องนี้ในย่อหน้าสุดท้าย
Chris หน้า

ตามที่กล่าวไว้บางส่วนในย่อหน้าสุดท้ายค่าเริ่มต้นอาจแตกต่างกัน / หายไปใน MacOS รุ่นอื่น สำหรับ 10.13.6 ฉันต้องเพิ่ม\033[5~(และ ... 6.) สำหรับ PageDown / Up
MarkHu

2

ทางออกที่ง่ายที่สุดและดีที่สุดคือn+ ซึ่งnเป็นจำนวนบรรทัดที่คุณต้องการลดระดับลงและเป็นปุ่มลง

ฉันเป็นประจำเพียงแค่ทำ12+ และ+22


1

ฉันคุ้นเคยกับ Home / End ทำให้ฉันเริ่มต้นและสิ้นสุดบรรทัดในโหมดแทรก (จากการใช้ใน Windows และฉันคิดว่า Linux) ซึ่ง Mac ไม่รองรับ สิ่งนี้น่ารำคาญเป็นพิเศษเพราะเมื่อฉันใช้ vim บนระบบระยะไกลฉันก็ไม่สามารถทำได้อย่างง่ายดาย หลังจากการทดลองและข้อผิดพลาดอันเจ็บปวดฉันได้พบกับบาง.vimrcบรรทัดที่ทำสิ่งเดียวกันและในที่สุดก็พบคนอื่นที่คิดวิธีแก้ปัญหาคล้ายกันที่นี่:

https://coderwall.com/p/fd_bea

สนุก.

:inoremap <C-e> <C-o>$
:inoremap <C-a> <C-o>0
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.