เหตุใดจึงไม่แนะนำปุ่มลูกศรใน Vim


125

"ไม่เคยใช้ปุ่มลูกศรในกลุ่ม!"

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


6
คำตอบในอดีตของคำถามนี้น่าสนใจ ผู้นับถือศาสนาน้อยลง
Isaac Rabinovitch

5
คำถามที่ดี. สิ่งนี้ทำให้ฉันรำคาญเกี่ยวกับ vi [m] เสมอในฐานะผู้ใช้คีย์บอร์ด Dvorak มันแย่จริงๆ!
Wim

32
ฉันจำได้ว่าเมื่อใช้ vi เป็นครั้งแรกเมื่อหลายปีก่อนเพื่อนร่วมงานอาวุโสให้คำปรึกษาฉัน "ตรวจสอบให้แน่ใจว่าคุณเรียนรู้การใช้ปุ่ม h, j, k และ l เพราะวันหนึ่งคุณจะลงเอยด้วยเครื่องที่เว็บไซต์ลูกค้าที่ลูกศร แป้นไม่ทำงานและคุณจะดูเหมือนหัว d สมบูรณ์ถ้าคุณไม่สามารถทำงานได้ vi "
Ergwun

1
ในโหมดแทรกคุณยังสามารถเลื่อนเคอร์เซอร์โดยใช้ Ctrl-O จากนั้นเป็นคำสั่งโหมดปกติและจะกลับไปที่โหมดแทรก ตรวจสอบ CTRL-G CTRL-J และ CTRL-G CTRL-K ซึ่งจะย้ายเคอร์เซอร์ไปยังบรรทัดถัดไปและบรรทัดก่อนหน้าที่คอลัมน์ที่คุณเริ่มแทรก
เบอนัวต์

1
ฉันพัฒนานิสัยแย่ vi [m] หลายครั้งในช่วงหลายปีที่ผ่านมา ฉันคิดว่าฉันต้องใช้มันผ่านการเชื่อมต่อที่ช้ามากเพื่อบังคับให้ฉันใช้นิสัยที่ดีขึ้น
Aidan

คำตอบ:


172

การใช้ปุ่มลูกศรถือเป็นนิสัยที่ไม่ดีเพราะหากคุณใช้ปุ่มลูกศรคุณอาจพลาดคุณลักษณะที่น่ารักมากมาย

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

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

มีทัศนคติว่าถ้าคุณใช้แป้นลูกศรแสดงว่าคุณใช้เสียง "ผิด" ความจริงก็คือเสียงเรียกนั้นมีเส้นโค้งการเรียนรู้ที่สูงชันจริง ๆ ดังนั้นในขณะที่คุณกำลังเรียนรู้ทำสิ่งที่ทำให้คุณมีสติ เมื่อฉันเริ่มใช้ vim ฉันทำทุกอย่างผิดวิธีและฉันก็ไม่มีปัญหาใด ๆ ในการทำลายนิสัยเมื่อฉันเรียนรู้คำสั่งของ vim เพิ่มเติม

ตัวอย่างเช่นเมื่อฉันเริ่มแรกพูดว่าฉันต้องการเปลี่ยนข้อความในเครื่องหมายคำพูด:

String mystring = "I want to change this";

ฉันจะเข้าสู่โหมดแทรกย้ายไปยังจุดสิ้นสุดของสตริงโดยใช้ปุ่มลูกศรกด backspace จนกว่าสตริงจะหายไปและป้อนข้อความใหม่

วิธีที่ดีมากคือการวางเคอร์เซอร์ของคุณได้ทุกที่ในสตริง (โหมดปกติ) ci"จากนั้นกดปุ่ม change in "นี้จะ มันจะลบทุกอย่างระหว่างเครื่องหมายคำพูดและทำให้คุณเข้าสู่โหมดแทรกเพื่อที่ฉันจะได้ใส่ข้อความใหม่


4
@ ott-- ci<และci)ทำงานได้ดีและคุณไม่ต้องขยับมือจากคีย์บอร์ดไปยังเมาส์ หากคุณต้องการนำทางไปยังจุดเริ่มต้นของวงเล็บแล้วเปลี่ยนเนื้อหาf(ci(ทำงาน
Matthew Finlay

6
"วางเคอร์เซอร์ของคุณได้ทุกที่ในสตริง" - และอีกครั้งในขณะที่ในโหมดแทรกคุณต้องการใช้ลูกศรเพื่อจะได้มีในโหมดปกติที่คุณสามารถทำ/wantและกด Enter จะลงจอดบนคำว่า 'ต้องการ' ci"แล้วทำ
Nathan Long

8
เฮ้นี่มันเรียบร้อย! ช่างเป็นวิธีที่รวดเร็วและมีประสิทธิภาพในการเลื่อนเคอร์เซอร์ไปมา วิธีเดียวที่จะปรับปรุงให้ดีขึ้นคือวิธีชี้ไปที่ที่คุณต้องการเคอร์เซอร์อย่างน่าอัศจรรย์และกระโดดข้ามไปที่นั่น บางทีเราสามารถประดิษฐ์บางสิ่งบางอย่าง ฉันคิดว่าเราควรเรียกมันว่า "เม้าส์"
Matthew Scouten

18
@MatthewScouten ไม่มีใครอ้างว่าเสียงเรียกเข้านั้นง่ายกว่าเม้าส์ ด้วยการฝึกฝนเล็กน้อยมันเร็วกว่ามาก การใช้เมาส์เปรียบเสมือนการชี้และคำรามเพื่อให้ได้คะแนนของคุณ Vim ให้คุณพูดเป็นประโยคเต็ม
คณบดี

4
นิสัยการทำลายเป็นคำตอบที่ดี - แต่การบังคับให้ใครบางคนทำกิจกรรมปกตินั้นเป็นลัทธิฟาสซิสต์ ที่แย่กว่านั้นคือการใช้งานของ ( hjkl): การแมปupและdownปุ่ม 2 ปุ่มที่แยกไม่ออกในแนวตั้งซึ่งแยกกันจากปุ่มซ้ายและขวา ..... เป็นการสาธิตที่น่าเศร้าของความเย่อหยิ่งในอุดมคติ
ใหม่ Alexandria

93

ตำแหน่งคีย์

กล่าวโดยย่อคือVimใช้hjklปุ่มต่าง ๆ เนื่องจากส่วนต่อประสานการนำทางเป็นเพราะส่วนที่เหลือของเทอร์มินัล "ADM-3A" เก่าที่มีปุ่มเหล่านี้ถูกทำเครื่องหมายด้วยลูกศร

แป้นพิมพ์

เนื่องจากvimได้มาจากviจะใช้คีย์ hjkl เดียวกัน

นิสัยใหม่

เปลี่ยนตามตัวอักษรสำหรับปุ่มลูกศรช่วยให้คุณสามารถนำทางข้อความโดยไม่ต้องสละมือของคุณออกไปจากการกำหนดค่าการพิมพ์มาตรฐาน สิ่งนี้มีประสิทธิภาพและรวดเร็วกว่าการขยับมือเพื่อกดปุ่มลูกศร ตามที่กล่าวไว้ในการอ้างอิง # 2 (ดูแหล่งข้อมูล) นี่ไม่ใช่จุดสิ้นสุดของข้อดีนี้: VIM มีทางลัดอื่น ๆ มากมายที่คุณสามารถเข้าถึงได้โดยไม่ต้องขยับมือ

ทรัพยากรและโหมดแทรก

มีคำตอบที่ถูกต้องและละเอียดสำหรับคำถาม 2 ข้อในส่วนของการแทนที่ปุ่มลูกศรฉันได้ตอบอย่างรวดเร็วและสรุปอย่างไรก็ตามสำหรับคำถามแทรกของคุณโปรดดูแหล่งข้อมูลด้านล่าง


2
ไม่ต้องพูดถึงว่าปุ่ม hjkl นั้นมีประสิทธิภาพมากกว่าการขยับมือของคุณไปที่ปุ่มลูกศร
sixtyfootersdude

2
สิ่งนี้ไม่ตอบคำถามเพียงอธิบายว่าทำไมเลือกhjkl
Matsemann

3
นี่คือความจริงและประวัติศาสตร์ที่น่าสนใจ แต่ OP ถามวิธีการที่คุณเลื่อนเคอร์เซอร์ในโหมดแทรก hjklไม่ทำงานในโหมดแทรกดังนั้นนี่เป็นคำตอบของคำถามได้อย่างไร
LarsH

3
@ ครูรูว์ส่วนแรกของคำถามคือทำไมบางคนบอกว่าไม่เคยใช้ปุ่มลูกศรในกลุ่ม ความจริงที่ว่าคุณสามารถใช้hjklในกลุ่มไม่ได้บอกว่าทำไมคนไม่ควรใช้ปุ่มลูกศรเช่นเดียวกับความจริงที่ว่าฉันสามารถขี่จักรยานไปทำงานไม่ได้อธิบายว่าทำไมบางคนถึงบอกว่าไม่เคยเขย่าเบา ๆ
LarsH

1
ตอนนี้ฉันเข้าใจแล้วว่าทำไมกลุ่มถึงใช้ Escape เพื่อออกจากโหมดแทรก ^^ ภาพสวย ๆ !
Étienne

56

มนต์ที่โง่นั้นมักถูกพิมพ์ซ้ำโดยนักพิมพ์แบบสัมผัสที่แถวบ้านเป็นเหมือนกระดูกสันหลังที่สองหรือโดยผู้พิมพ์แบบไม่สัมผัสที่ต้องการดูเท่ห์ สำหรับผู้ที่ไม่ใช้ระบบพิมพ์ดีดแถวบ้านไม่ใช่เรื่องพิเศษและการขยับมือขวาไปทางลูกศรเล็กน้อยนั้นไม่ใช่ปัญหาเลย

สิ่งสำคัญที่ต้องพิจารณาคือสิ่งที่ผู้คนทำซ้ำที่มนต์เสนอให้ใช้แทน

hjklเวลาส่วนใหญ่ของพวกเขายืนยันในการใช้

หากเราไม่ทราบว่ากุญแจเหล่านี้ถูกใช้เพียงเพราะแป้นพิมพ์ที่ผู้เขียน vi ใช้นั้นไม่มีปุ่มลูกศรจริงและการโต้แย้งใด ๆ กับปุ่มลูกศรนั้นเป็นเพียงการหาเหตุผลเข้าข้างตนเองhjklจะดีกว่าลูกศรเพียงเล็กน้อยเท่านั้น ใช่ประโยชน์เพียงอย่างเดียวของการใช้hjklลูกศรคือคุณข้ามการเคลื่อนไหวเล็ก ๆ ของมือขวาไปและกลับจากลูกศร ไม่ว่าผลประโยชน์นั้นจะมีค่าหรือเปล่าปัญหาก็คือการโทรของคุณ

แต่การเคลื่อนไหวของมือขวาไม่ใช่เหตุผลว่าทำไมการใช้ลูกศรเพียงอย่างเดียวจึงไม่มีประสิทธิภาพ มันไม่มีประสิทธิภาพเพราะมัน จำกัด ให้คุณย้ายตัวละครทีละตัวและทีละบรรทัดในขณะที่การเคลื่อนไหวส่วนใหญ่ที่จำเป็นสำหรับการแก้ไขข้อความมีช่วงที่ใหญ่กว่ามาก

การตอกลูกศรขวา 13 ครั้งนั้นไร้ประสิทธิภาพและน่าเบื่อ จะดีกว่าไหมถ้าใช้ค้อนlกุญแจ 13 ครั้ง? ไม่มันโง่เท่า ๆ กัน

การกดลูกศรขวาค้างไว้จนกว่าคุณจะไปถึงเป้าหมายนั้นน่าเบื่อน้อยลง แต่มันก็เกิดข้อผิดพลาดได้ง่ายและแทบไม่มีประสิทธิภาพเท่ากับ 13 ครั้งเพราะสิ่งที่จำเป็นและไม่สามารถยับยั้งได้ช้าลงในตอนท้าย มันเป็นเรื่องที่ดีกว่าที่จะเก็บlกดคีย์? ไม่แน่นอน

โชคดีที่ชุดเครื่องมือ GUI ส่วนใหญ่ให้คอมโบเช่นCtrl+Rightนั้นทำให้เราสามารถย้ายคำต่อคำหรือข้ามไปที่ EOL ไปยังย่อหน้าถัดไปหรืออะไรก็ตาม ทางลัดเหล่านี้ช่วยให้เรานำทางได้เร็วขึ้นและชาญฉลาดกว่าด้วยปุ่มลูกศรเดียว เรามีเหมือนกันhjklหรือไม่ ไม่เราทำไม่ได้ เราสามารถใช้การนับถ้าเราต้องการ แต่ใครต้องการนับตัวละครสำหรับทุกการเคลื่อนไหว? การทำ14kด้วยความช่วยเหลือrelativenumberนั้นยอดเยี่ยม แต่สิ่งที่เกี่ยวกับการเคลื่อนไหวในแนวนอน? สำหรับการเคลื่อนไหวขนาดใหญ่hjklจริงๆแล้วแย่กว่า modifiers + arrows และคาดเดาอะไร การเคลื่อนไหวครั้งใหญ่เป็นสิ่งที่เราต้องการมากที่สุด

แต่เราเป็นไอ้ผู้โชคดีผู้แก้ไขที่ชื่นชอบของเรามีการเคลื่อนไหวหลายสิบครั้งที่วนเวียนรอบทั้งลูกศรและ hjkl : bBeEwW/?*#{}()และอื่น ๆ คำสั่งเหล่านี้จะล้นพ้นมากขึ้นกว่าการเสริมสร้างศักยภาพhjklและส่วนใหญ่มากขึ้นตรรกะและใช้งานง่ายถ้าคุณจะใช้Ctrl+Rightและเพื่อน ๆ

การเปลี่ยนจาก<Right><Right><Right><Right><Right><Right><Right><Right><Right>เป็นlllllllllหรือแม้แต่9lไร้สาระไร้สาระ

เปลี่ยนจาก<Right><Right><Right><Right><Right><Right><Right><Right><Right>การ<C-Right>เป็นอย่างมากมายที่ดีกว่า จากตรงนั้นการเปลี่ยนwเป็นทั้งง่ายและรวดเร็ว ไม่ต้องการ<nop>ลูกศรของคุณ!

หากคำสั่งเหล่านี้มีประโยชน์มากขึ้นมีประสิทธิภาพมากขึ้นและใช้งานง่ายกว่าhjklทำไมในทุกนรกจึงเขียนบล็อกและแสดงความคิดเห็นจำนวนมากยืนยันในการเปลี่ยนลูกศรด้วยhjkl?

ฉันมี. ไม่มีความเห็น.

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


ตอนแรกฉันคิดว่าคุณกำลังจะบอกว่า 'hjkl' ไร้ประโยชน์ แต่การจับการเคลื่อนไหวคำ / ย่อหน้า / ประโยคที่มีประโยชน์นั้นมีประโยชน์มากกว่าที่มนต์เกี่ยวกับการเคลื่อนไหวของตัวละครเดียว
ซาเวียร์ต

1
ขอบคุณ ฉันมีการอภิปรายคล้าย ๆ กันเกี่ยวกับ HN ในวันอื่น ๆ การมุ่งเน้นความพยายามของคน ๆ หนึ่งhjkl นั้นไร้ประโยชน์ แต่hjklมีประโยชน์
romainl

5
เหมือนกันที่นี่: ในที่สุดฉันชอบคำตอบของคุณ แต่ฉันคิดว่าน้ำเสียงดังเข้ามาในขณะที่คุยโว / trolling / เพลิง
UncleZeiv

อย่าเรียกพวกเขาว่าไร้ประโยชน์ข้อโต้แย้งเกี่ยวกับความเร็วนั้นดีและวิธีที่ HJKL ทำงานกับคำสั่ง VIM อื่น ๆ ในลักษณะที่ปุ่มลูกศรนั้นก็ไม่สำคัญเช่นกัน
Aviator45003

@TC ตัวอย่างใดที่ทำให้การอภิปรายทั้งหมดน่าสนใจยิ่งขึ้น
romainl

18

คนอื่น ๆ อธิบายว่าทำไมการเลื่อนเคอร์เซอร์แบบอื่นจึงเป็นที่ต้องการ แต่มีคนพูดกันเล็กน้อยว่าต้องตอบคำถามทำไมจึงถือว่าเป็นความคิดที่ไม่ดีที่จะใช้ปุ่มลูกศร?

ฉันคิดว่าเหตุผลหลัก (และ @Squeezy ค่อนข้างพูดพาดพิงถึงเรื่องนี้) คือในสมัยของเทอร์มินัลอย่าง VT100 ปุ่มลูกศรสร้างลำดับการหลบหนีที่ตีความโดยโปรแกรมที่กำลังทำงานอยู่ (เนื่องจากปุ่มลูกศรไม่ได้แสดงใน ASCII การพิมพ์ปุ่มลูกศรจึงต้องมีการสื่อสารด้วยวิธี "พิเศษ" บางอย่าง) โดยทั่วไปแล้วลำดับการหลบหนีเป็นสิ่งที่ต้องการ

ESC [ A

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

เมื่อฉันอยู่ในวิทยาลัยการเข้าสู่ระบบ Ultrix ผ่านทางเทอร์มินัล VT100 ถ้าฉันกดลูกศรในขณะที่อยู่ในโหมดแทรกฉันESCจะตีความว่าเป็น "ออกจากโหมดแทรก" จากนั้นคำอธิบายต่อไปนี้[ Aจะตีความเป็นคำสั่งโหมดปกติ . เห็นได้ชัดว่าไม่ใช่สิ่งที่ผู้ใช้ต้องการหรือคาดหวัง!

ทุกวันนี้การจัดการเทอร์มินัลและปุ่มลูกศรดูเหมือนจะแข็งแกร่งขึ้นโดยเฉพาะในสภาพแวดล้อม GUI แต่ปัญหาเดียวกันนี้ยังคงเกิดขึ้นเมื่อใช้ vim บน SSH หรือ Telnet


14

การใช้ปุ่มลูกศรจะขมวดคิ้วเพราะมันบังคับให้คุณเลื่อนนิ้วของคุณออกจาก homerow เมื่อใช้เค้าโครง QWERTY และจากแป้นอักขระ (?) เมื่อใช้ Dvorak หรือรูปแบบอื่นใด


4
ว้าว. อย่างจริงจัง? ฉันไม่ต้องการที่จะเชื่อว่ามันจะหมายความว่าคนที่ออกแบบ Vim จะคิดว่าผู้ใช้ของพวกเขาใช้เวลาในการพิมพ์มากกว่าที่คิด
Renan

13
ทำไมการเคลื่อนไหวของคุณถึงมีความหมาย?
EBGreen

8
เมื่อฉันต้องทำที่โรงเรียนคุณต้องกดปุ่ม Esc ก่อนจึงจะสามารถใช้การนำทาง hjkl ได้ดังนั้นคุณจึงเอามือซ้ายของคุณออกจากแถวบ้านเพื่อไปที่นิ้วก้อยขึ้นไปที่ Esc ฉันจำได้ว่าต้องย้อนกลับไปหนึ่งช่องว่างและใส่อักขระที่คุณต้องป้อน 'Esc: hi' แล้วพิมพ์อักขระที่คุณต้องการแทรก นั่นไม่เป็นประโยชน์
Frank Thomas

1
@Renan - คุณกำลังสมมติว่า 'กำลังพิมพ์' หมายถึง 'การแทรกข้อความ' ฉันมีมือของฉันในแถวบ้านเมื่อฉันอ่านและการคิดด้วยเพราะแป้นพิมพ์เป็นวิธีการที่ฉันนำทางในกลุ่ม: ค้นหาที่จะย้ายไปเปิดไฟล์อื่น ๆ เพื่อเปรียบเทียบรหัสกระโดดไปรอบ ๆ เพื่อแก้ไขข้อผิดพลาดการสะกด ฯลฯ
นาธาน ยาว

2
@ Renan - 1) คุณประมาทการออมและ 2) สิ่งเล็ก ๆ น้อย ๆ เพิ่มขึ้น ฉันเคยเห็นผู้ใช้แบบกลุ่มที่ใช้พลังงานแบบสัมผัสได้แก้ไขความเร็วของนักพัฒนาอื่น ๆ ได้ถึง 10 เท่า ที่ความเร็วเพียงพอการแก้ไขจะกลายเป็นอัตโนมัติและไม่ขัดจังหวะความคิดหรือการไหล มันเป็นความสุขที่ได้ทำงานด้วยวิธีนี้ดังนั้นมันจึงลอยเรือของฉัน แต่ฉันจะเดิมพันมันเป็นการเพิ่มประสิทธิภาพการผลิตที่ใหญ่กว่าที่คุณคิด ลองดูตัวแปลงสัญญาณเช่น Gary Bernhardt เป็นตัวอย่าง
นาธานลอง

10

ปุ่มลูกศรแสดงปัญหาซึ่งเป็นที่ทราบกันดีอยู่แล้วใน vi - บนการเชื่อมต่อที่ช้าเช่นบน 1200 baud modem ลูกศรแปลลำดับ ESC ESC aเช่น ตอนนี้เมื่อเวลาระหว่าง ESC และ a ยาวเกินไปคุณจะได้ยิน BEL (หรือเห็นแฟลช) ตามด้วยโหมดต่อท้าย สิ่งนี้จะไม่ปรากฏขึ้นพร้อมกับhjklกุญแจ


ฉันคิดESC [ Aว่าคุณหมายถึงอะไร
LarsH

2
ESC [ Aคือเทอร์มินัล DEC VT-100 (เทอร์มินัล ANSI เป็นอนุพันธ์ของลูกศร DEC VT-100) IIRC ESC Aเป็นลูกศร ADM-3A หรือเป็นลูกศร DEC VT-52 จุดยังคงเหมือนเดิม แต่ESCตัวละครที่ส่งเป็นส่วนหนึ่งของปุ่มลูกศรนั้นสับสนได้ง่ายกับการESCพิมพ์ด้วยตนเอง
RBerteig

@Berteig: รู้ดี
LarsH

5

เกี่ยวกับคำถามที่สอง:

[I] ถ้าคุณไม่ใช้ปุ่มลูกศรคุณจะเลื่อนเคอร์เซอร์ในโหมดแทรกได้อย่างไร

สำหรับผู้ที่เป็นมาสเตอร์และผู้ที่กดปุ่มลูกศรจะไม่เห็นแนวคิดของ "โหมด" เช่นเดียวกัน

ต้นแบบเพิ่มข้อความใหม่โดยใช้โหมดไม่ได้ใส่ แต่สมบูรณ์แทรกหรือการเปลี่ยนคำสั่งซึ่งเริ่มต้นด้วยการ opcode เช่นi, oหรือที่จะตามด้วยข้อความน้ำหนักบรรทุกและยกเลิกโดยcw ESCคำสั่งมีไวยากรณ์และดังนั้นเครื่องจึงข้ามผ่านสถานะในการยอมรับไวยากรณ์ของคำสั่ง แต่ในโมเดลต้นแบบของเอดิเตอร์สิ่งเหล่านี้จะไม่ก่อให้เกิดโหมด สิ่งที่ผู้ฝึกหัดเรียกอย่างไร้ความปราณีว่า "โหมด" คือสิ่งที่ยังไม่เสร็จซึ่งเป็นสถานการณ์ที่น่ารังเกียจที่สุดที่นายหลีกเลี่ยง

เมื่อใดก็ตามที่ต้นแบบตระหนักถึงในขณะที่อยู่ตรงกลางของคำสั่งแทรกหรือแทนที่ข้อความนั้นจะต้องแทรกหรือลบอื่น ๆ นอกเหนือจากตำแหน่งตัวอักษรต่อไปที่ระบุโดยเคอร์เซอร์เจ้านายจะยุติคำสั่งแทรกและปล่อยหนึ่งในหลายสิบที่มีประสิทธิภาพ คำสั่งการเคลื่อนไหว (หันไปทางที่ต่ำhjklถ้าวิธีที่มีประสิทธิภาพมากขึ้นไม่สามารถใช้งานได้อย่างเห็นได้ชัด)

ยิ่งไปกว่านั้นเมื่อเจ้านายไม่ค่อยหันเหความสนใจในลักษณะที่จะออกคำสั่งยังไม่เสร็จนายก็แทบจะไม่ส่งผลให้บรรณาธิการส่งเสียงบี๊บเนื่องจากมีรายการฟุ่มเฟือยESCออก "ในกรณี"

(อย่างไรก็ตามเมื่อเครือข่ายล่าช้าหรือเครื่องติดขัดปอนด์หลักของESCคีย์จะคึกคักและซ้ำ ๆ เหมือนทุก ๆ คน)


2
โปรดจำไว้ว่าถ้าviรายการคำสั่งแทรกเป็นโหมดจากนั้นจึงมีความเป็นธรรมเราจะต้องระบุโหมดดังกล่าวทั้งหมดในโปรแกรมแก้ไขอื่น ๆ และเรียกพวกเขาเป็นคำกริยา ตัวอย่างเช่นเมื่อเรากด Ctrl-X ใน Emacs เราจะอยู่ใน "โหมด" ซึ่งเป็นไปได้เช่นกด Ctrl-S เพื่อบันทึกเอกสารซึ่งจะไม่ทำงานนอกโหมด "นั้น"
Kaz

5
  • ปุ่มลูกศรอาจทำงานได้ไม่ดีในบางสภาพแวดล้อม hjklเป็นตัวอักษรปกติและเป็นที่เข้าใจกันดีโดยเทอร์มินัลทุกชนิด
  • คุณไม่ย้ายเคอร์เซอร์ในโหมดแทรก (ยกเว้นBackspaceและแก้ไขการพิมพ์ผิดสั้น ๆ ) ความคิดของviคือการเข้าสู่โหมดแทรกเท่านั้นเพื่อเข้าสู่บางสิ่ง การเคลื่อนไหวทำได้ในโหมดปกติ
  • หากคุณสามารถทำได้คุณควรหลีกเลี่ยงการใช้hjklสำหรับการเคลื่อนย้ายที่ใดก็ตามที่มีผลบังคับใช้และใช้เพื่อเป็นแนวทางเท่านั้น มีตัวเลือกมากมายในการย้ายเข้าviดู: http://vim.wikia.com/wiki/Moving_around

จริงๆแล้วคุณสามารถเลื่อนเคอร์เซอร์ในโหมดแทรกอย่างน้อยไปทางซ้ายโดยใช้ backspace แต่ฉันยอมรับว่าคุณไม่สามารถเคลื่อนย้ายได้อย่างอิสระ
LarsH

ฉันพยายามแสดงว่าคุณไม่ต้องการย้ายเคอร์เซอร์ในโหมดแทรกเลย
Squeezy

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

3

ใช่ด้วยเหตุผลหลายประการที่กล่าวถึงข้างต้นviเดิมเขียนขึ้นเพื่อใช้hjklแต่ " ไม่เคย " เป็นคำสั่งที่ค่อนข้างใหญ่

ฉันมักจะแก้ไขvim(และเครื่องมืออื่น ๆ ที่ฉันใช้) เพื่อทำตัวเหมือนที่ฉันต้องการ สิ่งนี้ใช้งานได้ดีบนเครื่องของฉัน แต่ในฐานะนักพัฒนาระบบฝังตัวฉันไม่สามารถเลือกสิ่งที่อยู่บนเครื่องที่ฉันรองรับได้ ฉันเจอเครื่องรุ่นเก่าที่มีhjklการนำทางในviบางโอกาสเท่านั้น hjklผมจบลงด้วยการควบคุมรหัสที่ใส่ลงในแฟ้มของฉันสำหรับสองหรือสองจนกว่าฉันอีกครั้งหยุดนิสัยของฉันและเปลี่ยนไป

เหตุผลเดียวที่ฉันสามารถใช้เพื่อ "ไม่เคยใช้ปุ่มลูกศรใน Vim!" คือคุณสามารถใช้เครื่องจักรที่ไม่สามารถจัดการปุ่มลูกศรได้ รู้สึกเหมือนมีเหตุผลบางอย่างที่จะพูดว่า " ไม่เคย "


3

หากคุณไม่ใช้ปุ่มลูกศรคุณจะย้ายเคอร์เซอร์ในโหมดแทรกได้อย่างไร

เหตุผลหลักว่าทำไมฉันไม่สนับสนุนให้ผู้ใช้ใช้ปุ่มลูกศรอย่างชัดเจนเพราะมันช่วยให้คุณสามารถย้ายไปมาขณะอยู่ในโหมดแทรก

หนึ่งในปัญหาที่แปลกประหลาดที่มีการเรียนรู้ที่เป็นกลุ่มสำหรับผู้มาใหม่เป็นคำสั่งยกเลิกของกลุ่มที่ดำเนินการโดยยกเลิกที่ผ่านมาการดำเนินการไม่ได้สุดท้ายการกดแป้นพิมพ์ เพื่อนของฉันหลายคนยังอยู่ในโหมดแทรกตลอดเวลาเพราะไม่มีเหตุผลที่จะจากไป เมื่อพวกเขาถามฉันว่า "ฉันจะยกเลิกได้อย่างไร" ฉันตอบกลับด้วย "กดตัวอักษร u จากโหมดคำสั่ง" พวกเขาจะหงุดหงิดเมื่อเสียงเรียกเข้าล้างไฟล์ทั้งหมดออกไป

"เสียงเรียกเข้าเป็นเครื่องมือแก้ไขข้อความที่ไร้ค่าหากไม่สามารถยกเลิกสิ่งที่ถูกต้องได้"

เป็นการยากที่จะใช้เครื่องมือก่อนที่คุณจะเรียนรู้วิธีการ

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

ด้วยเหตุนี้คุณควรป้อนข้อความเมื่อคุณเข้าinsert modeเท่านั้น การหลีกเลี่ยงปุ่มลูกศรเป็นเพียงวิธีหนึ่งที่เราพบว่าช่วยให้คุณเป็นผู้ใช้กลุ่มที่ดีขึ้นเร็วขึ้น


0

การใช้เสียงเรียกเข้าในขณะที่ shelled ลงในอุปกรณ์ Android ของฉันซึ่งใช้ ssh daemon ใน kbox ทำให้ฉันแยกตัวออกจากเขตความสะดวกสบายของฉัน เนื่องจาก Anroid Terminal Emulator บนอุปกรณ์ใช้ปุ่มปรับระดับเสียงเพื่อแทนที่ชุดคีย์พิเศษ (ctrl + อะไรก็ตาม) บางคีย์ที่ฉันใช้ตามปกติบนแป้นพิมพ์จะไม่ทำงานในสถานการณ์นี้

ตัวอย่างเช่นปุ่มแทรกไม่ทำงานในสภาพแวดล้อมนี้ดังนั้นฉันจึงใช้Iเพื่อสลับไปยังโหมดแทรก ปุ่ม Esc ซึ่งฉันมักใช้เพื่อหลีกเลี่ยงการแทรกโหมดไม่ทำงานดังนั้นฉันจึงใช้ctrl + [เพื่อหลบหนีแทน ปุ่ม Home และ End ไม่ทำงานตามที่ฉันคุ้นเคย แต่ฉันพึ่ง0และ$ทางลัดที่ฉันไม่เคยใส่ใจมาก่อนที่จะถึงจุดเริ่มต้นหรือจุดสิ้นสุดของบรรทัด

อย่างไรก็ตามปุ่มลูกศรยังคงทำงานตามปกติในสถานการณ์ของฉัน แต่มันก็ดีที่รู้ว่ามีแป้นพิมพ์ลัดที่เรียบง่าย


0

เพียงเขียนคำสั่งต่อไปนี้ก่อนที่จะเขียนเป็นกลุ่ม: -

  1. ESC
  2. : ตั้งค่า nocp

ปัญหาอย่างหนึ่งของเรื่องนี้คือคุณอาจต้องเขียนมันทุกครั้ง


นี่จะเป็นประโยชน์เมื่อคุณต้องการใช้ปุ่มลูกศรในโหมดแทรก
0decimal0

0

นี่คือ 2 my ของฉัน

ทำสิ่งที่คุณรู้สึกสบายใจ หากคุณใช้โปรแกรมแก้ไขอื่น ๆ การใช้ปุ่มลูกศรเพื่อความมั่นคงอาจทำได้ง่ายกว่า

ในทางกลับกันมันเป็นสิ่งที่ยอดเยี่ยมอย่างยิ่งที่ vi (และเสียงเรียกเข้า) ไม่ต้องการคีย์พิเศษใด ๆ ยกเว้นบางที คุณอาจแฮ็คตัวเลือก IBM เก่าเพื่อทำหน้าที่เป็นเทอร์มินัล

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


0

ชื่อของเกมที่มีโปรแกรมแก้ไขข้อความที่ปรับปรุงแล้วดูเหมือนว่าจะ "เคลื่อนที่ไปรอบ ๆ อย่างรวดเร็ว" และลดการเคลื่อนไหวที่สิ้นเปลือง / ซ้ำ ๆ มีบางเวลาที่หายไปเมื่อคุณย้ายจากคีย์จดหมายถึงปุ่มลูกศร (ขึ้นอยู่กับขนาดของแป้นพิมพ์) และกว่ากลับไปยังแถวบ้าน แต่ถ้าคุณไปที่ปุ่ม ESC ด้วยโหมดสลับนิ้วก้อยหรือนิ้วก้อยของคุณกลายเป็นหนึ่งในการเคลื่อนไหวของของเหลวและในช่วงของการแก้ไขจะมีความเร็วเพิ่มขึ้น

และนี่คือกุญแจสำคัญในส่วนที่สองของคำถามของคุณออกจากโหมดแทรกโดยกดปุ่ม ESC ด้วยซ้ายของคุณและย้ายด้วย hjkl ด้วยขวาของคุณ ในที่สุดคุณจะสามารถทำสิ่งนี้ได้โดยไม่ข้ามจังหวะ

ที่ถูกกล่าวว่าฉันไม่เคยมี Vim มาก่อนจนกว่าฉันจะลองบางสิ่งที่กล่าวถึงที่นี่สิ่งสำคัญที่สุดคือการ "รับประสิทธิภาพ: การแมปทางลัด "

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