ข้อดีของการใช้ set -o vi


55

ฉันเห็นนักพัฒนาหลายคนใช้คำสั่งนี้เพื่อตั้งค่าตัวเลือกเป็น vi ฉันไม่เคยเข้าใจการใช้งานจริงของสิ่งนี้?

เมื่อใช้คำสั่ง bash การสลับไปใช้ vi ช่วยอะไรได้บ้าง

คำตอบ:


58

โดยการตั้งค่าการแก้ไข ReadLine ของคุณทั้ง emacs (ค่าเริ่มต้น) หรือ vi ( set -o vi) ที่คุณจะได้เป็นหลักมาตรฐานคำสั่งการแก้ไขของคุณข้ามเปลือกและบรรณาธิการของทางเลือกที่ 1

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

คุณสามารถใช้ประโยชน์จากความสัมพันธ์นี้ในโหมด vi โดยดึงคำสั่งใด ๆ จากประวัติเชลล์ของคุณกดปุ่มEscapeเพื่อเข้าสู่โหมดคำสั่งแล้วกดปุ่มvซึ่งจะเปิด $ EDITOR ของคุณด้วยคำสั่งที่โหลดเพื่อแก้ไขที่ซับซ้อนมากขึ้นด้วยพลังเต็ม เมื่อคุณแก้ไขคำสั่งเสร็จแล้วเพื่อความพึงพอใจของคุณ:wqและคำสั่งจะถูกดำเนินการในเชลล์ของคุณ


1. แน่นอนว่าคุณใช้ Emacs หรือ Vi / m เป็นเครื่องมือแก้ไขของคุณ
2. หรืออย่างแม่นยำยิ่งขึ้นส่วนย่อยของมัน ...


1
ฉันได้รับจอกศักดิ์สิทธิ์:) ....
Sathyam

3
เคล็ดลับ Esc-v เป็นหนึ่งในคุณสมบัติที่ดีที่สุดของset -o viที่คนส่วนใหญ่ไม่รู้ นี่เป็นจริงโดยเฉพาะอย่างยิ่งถ้าคุณต้องการออกคำสั่งเดียวกันหลายครั้งด้วยข้อโต้แย้งที่แตกต่างกัน (เป็นคำสั่งหลายบรรทัดคำสั่ง)
Michael Goldshteyn

2
Esc-V set -o viเคล็ดลับคือไม่ได้จริงๆได้เปรียบที่เฉพาะเจาะจงเพื่อ ภายใต้การตั้งค่าเริ่มต้นของset -o EMACSCx, Ce จะแสดงหน้าต่าง emacs (หรือ$EDITORถ้าตั้งค่า) ซึ่งคุณสามารถแก้ไขคำสั่งก่อนที่จะเรียกใช้
John Gowers

8

โหมด Vi เป็นการปรับปรุงการใช้งานอย่างมากหากคุณใช้ไคลเอนต์ SSH มือถือเช่น ConnectBot สำหรับ Android

นี่คือสาเหตุที่ลดการพึ่งพาคีย์ตัวปรับแต่ง

Vim นั้นใช้งานง่ายกว่าด้วยคีย์บอร์ดเสมือนบนสมาร์ทโฟนหรือแท็บเล็ตมากกว่า ... สิ่งอื่นรวมถึงวิธีการแก้ไขแบบเนทีฟที่สร้างขึ้นใน Android UI กระแทกแดกดันมันเป็นเรื่องง่ายที่จะแก้ไขแหล่ง C กับ Vim ในเซสชั่น SSH กว่าที่จะแก้ไขพูดข้อความโต้ตอบแบบทันทีด้วยวิดเจ็ตการแก้ไขของแพลตฟอร์มเองเพื่อจุดประสงค์นั้น

โหมด Shell vi ให้ประโยชน์ที่คล้ายคลึงกัน


ฉันหวังว่าจะมีโหมด vi บนแป้นพิมพ์โทรศัพท์ของฉัน คุณพูดถึงสิ่งนี้ราวกับว่ามันมีอยู่แล้ว ฉันจะรับโหมด vi บนโทรศัพท์ของฉันได้อย่างไร
Meh

6

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

ตัวอย่างจะช่วยทำให้ชัดเจนมากขึ้น:

คุณพิมพ์ cp tmp/some_other_long_directory/file1.xt /tmp2/some_other_xtra_long_dir/

แต่คุณได้รับข้อผิดพลาด - คุณควรพิมพ์file1.txtไม่ได้file1.xt

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

ด้วยชุดตัวเลือกนี้คุณสามารถ (ตัวอย่าง) กดลูกศรขึ้นหนึ่งครั้งจากนั้นหนีสำหรับโหมดคำสั่ง 0 เพื่อไปที่จุดเริ่มต้นของบรรทัดแล้ว/xt[return]ไปที่xtและจากนั้นคุณสามารถพิมพ์iสำหรับโหมดแทรกและพิมพ์ t ที่ขาดหายไป นี่อาจดูซับซ้อนอย่างเมามันในบางประเด็น แต่ถ้าคุณเป็นผู้ใช้กลุ่มคำสั่งเหล่านี้เป็นที่รู้จักกันดีอยู่แล้ว การกดแป้นทั้งหมด: 9


1
คุณสามารถใช้ไม่กี่Alt+Bs หรือ a Ctrl+Alt+] .ในโหมด Emacs ด้วยดังนั้นนี่ไม่ได้เป็นตัวอย่างที่ดีสำหรับฉัน
Mikel

2
เห็นในขณะที่เรากำลังเล่นกอล์ฟ: โหมด Emacs: Up, Ctrl+Alt+], ., Right, t, Enter= 8. Vi โหมด: Up, F, ., a, t, Enter= 7. :)
มิเกล

@ Mikel คุณลืมว่าโหมด vi เริ่มต้นในโหมดแทรกดังนั้นคุณมีEscอยู่ในนั้นเช่นกันมันเป็นความร้อนแรง
dragon788

5

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


สถานการณ์ที่คล้ายกันสำหรับฉัน - ฉันใช้เสียงเรียกเข้าเป็นจำนวนมาก แต่ฉันพบว่ามันทำงานน้อยกว่าที่จะมีความเชี่ยวชาญในปุ่ม readline เหมือน emacs ที่เป็นค่าเริ่มต้น ไปที่โหมด vi ในทุกระบบใหม่ที่ฉันเจอ
jw013

1
ฉันไม่ได้ทำงานกับเซิร์ฟเวอร์หลายร้อยเครื่อง แต่ฉันใช้sshrcเพื่อทำให้การตั้งค่า bash ของฉันคล้ายกันระหว่างคอมพิวเตอร์ต่าง ๆ เมื่อsshใช้งาน แน่นอนว่ามันไม่ได้ช่วยอะไรตอนที่ฉันใช้เครื่องจักรที่ไม่มี.bashrcสิ่งของอยู่
Kyle Strand

4

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

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


1

หากคุณคุ้นเคยviคุณจึงตั้งเป็นโหมด vi เป็นตัวแก้ไขเชลล์ของคุณ นั่นเป็นเหตุผลที่ชัดเจน ส่วนอีกคนหนึ่งคือเมื่อbashไม่สามารถใช้ได้โดยเริ่มต้นในบางระบบปฏิบัติการ (ส่วนใหญ่ใช้ระบบปฏิบัติการยูนิกซ์เช่น AIX, Solaris) ดังนั้นประวัติเปลือกไม่สามารถใช้ได้ดังนั้นวิธีที่คุณได้รับคำสั่งที่ผ่านมาโดยการตั้งค่าแก้ไขเปลือกviและEsc, Ctrl+ KหรือCtrl+L


1

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

โดยทางลัดเริ่มต้นเมื่อคุณต้องไปที่จุดสิ้นสุดของบรรทัดคุณต้องCtrl+ eในขณะที่set -o viคุณเพิ่งกด$เช่นในกลุ่ม


1

อาจจะช้าไปงานปาร์ตี้ แต่สำหรับฉันที่ใช้โหมด vi เป็นเรื่องเกี่ยวกับการสร้าง Scrips เชิงโต้ตอบ ..

for i in `ls | grep -v gz`
do
    echo $i
    gzip $i
done

ตัวอย่างง่ายๆของสิ่งที่อาจจะค่อนข้างซับซ้อน .. การใช้ESCkvทำให้คุณเข้าสู่เซสชัน vi ที่คุณสามารถปรับเปลี่ยนสคริปต์และจากนั้น:wqมันจะทำงาน


1
นี่อาจเป็นตัวอย่างที่ดีของการใช้ bash ในviโหมด แต่เป็นตัวอย่างที่ดีของรหัส bash (1) การใช้เอาต์พุตจากlsเป็นอินพุตกับการประมวลผลประเภทอื่น ๆ เป็นความคิดที่ไม่ดี (2) $(…)ไวยากรณ์สำหรับการทดแทนคำสั่งถูกพิจารณาอย่างกว้างขวางว่าอ่านได้ง่ายกว่า`…`ไวยากรณ์ (3) คุณควรอ้างอิงตัวแปรเชลล์ทุกครั้งยกเว้นว่าคุณไม่มีเหตุผลที่ดีและคุณแน่ใจว่าคุณรู้ว่าคุณกำลังทำอะไรอยู่
G-Man
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.