ฉันเห็นนักพัฒนาหลายคนใช้คำสั่งนี้เพื่อตั้งค่าตัวเลือกเป็น vi ฉันไม่เคยเข้าใจการใช้งานจริงของสิ่งนี้?
เมื่อใช้คำสั่ง bash การสลับไปใช้ vi ช่วยอะไรได้บ้าง
ฉันเห็นนักพัฒนาหลายคนใช้คำสั่งนี้เพื่อตั้งค่าตัวเลือกเป็น vi ฉันไม่เคยเข้าใจการใช้งานจริงของสิ่งนี้?
เมื่อใช้คำสั่ง bash การสลับไปใช้ vi ช่วยอะไรได้บ้าง
คำตอบ:
โดยการตั้งค่าการแก้ไข ReadLine ของคุณทั้ง emacs (ค่าเริ่มต้น) หรือ vi ( set -o vi
) ที่คุณจะได้เป็นหลักมาตรฐานคำสั่งการแก้ไขของคุณข้ามเปลือกและบรรณาธิการของทางเลือกที่ 1
ดังนั้นหากคุณต้องการแก้ไขคำสั่งในเชลล์คุณใช้คำสั่งเดียวกัน2ที่คุณใช้หากคุณอยู่ในโปรแกรมแก้ไขข้อความ ซึ่งหมายความว่าต้องจำไวยากรณ์คำสั่งเดียวเท่านั้นและ (หากไม่ได้ประโยชน์เพียงพอ) อาจทำให้การแก้ไขของคุณในทั้งสองสภาพแวดล้อมเร็วขึ้นและมีข้อผิดพลาดน้อยลง ...
คุณสามารถใช้ประโยชน์จากความสัมพันธ์นี้ในโหมด vi โดยดึงคำสั่งใด ๆ จากประวัติเชลล์ของคุณกดปุ่มEscapeเพื่อเข้าสู่โหมดคำสั่งแล้วกดปุ่มvซึ่งจะเปิด $ EDITOR ของคุณด้วยคำสั่งที่โหลดเพื่อแก้ไขที่ซับซ้อนมากขึ้นด้วยพลังเต็ม เมื่อคุณแก้ไขคำสั่งเสร็จแล้วเพื่อความพึงพอใจของคุณ:wqและคำสั่งจะถูกดำเนินการในเชลล์ของคุณ
1. แน่นอนว่าคุณใช้ Emacs หรือ Vi / m เป็นเครื่องมือแก้ไขของคุณ
2. หรืออย่างแม่นยำยิ่งขึ้นส่วนย่อยของมัน ...
set -o vi
ที่คนส่วนใหญ่ไม่รู้ นี่เป็นจริงโดยเฉพาะอย่างยิ่งถ้าคุณต้องการออกคำสั่งเดียวกันหลายครั้งด้วยข้อโต้แย้งที่แตกต่างกัน (เป็นคำสั่งหลายบรรทัดคำสั่ง)
set -o vi
เคล็ดลับคือไม่ได้จริงๆได้เปรียบที่เฉพาะเจาะจงเพื่อ ภายใต้การตั้งค่าเริ่มต้นของset -o EMACS
Cx, Ce จะแสดงหน้าต่าง emacs (หรือ$EDITOR
ถ้าตั้งค่า) ซึ่งคุณสามารถแก้ไขคำสั่งก่อนที่จะเรียกใช้
โหมด Vi เป็นการปรับปรุงการใช้งานอย่างมากหากคุณใช้ไคลเอนต์ SSH มือถือเช่น ConnectBot สำหรับ Android
นี่คือสาเหตุที่ลดการพึ่งพาคีย์ตัวปรับแต่ง
Vim นั้นใช้งานง่ายกว่าด้วยคีย์บอร์ดเสมือนบนสมาร์ทโฟนหรือแท็บเล็ตมากกว่า ... สิ่งอื่นรวมถึงวิธีการแก้ไขแบบเนทีฟที่สร้างขึ้นใน Android UI กระแทกแดกดันมันเป็นเรื่องง่ายที่จะแก้ไขแหล่ง C กับ Vim ในเซสชั่น SSH กว่าที่จะแก้ไขพูดข้อความโต้ตอบแบบทันทีด้วยวิดเจ็ตการแก้ไขของแพลตฟอร์มเองเพื่อจุดประสงค์นั้น
โหมด Shell vi ให้ประโยชน์ที่คล้ายคลึงกัน
มันช่วยให้คุณแก้ไขสิ่งต่าง ๆ ที่บรรทัดคำสั่งโดยใช้โหมด 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
Alt+B
s หรือ a Ctrl+Alt+]
.
ในโหมด Emacs ด้วยดังนั้นนี่ไม่ได้เป็นตัวอย่างที่ดีสำหรับฉัน
Up
, Ctrl+Alt+]
, .
, Right
, t
, Enter
= 8. Vi โหมด: Up
, F
, .
, a
, t
, Enter
= 7. :)
Esc
อยู่ในนั้นเช่นกันมันเป็นความร้อนแรง
ฉันไม่แน่ใจว่ามีข้อได้เปรียบโดยตรง ฉันเป็นvi
ผู้ใช้งานมานานกว่า 20 ปี ฉันยังเป็นscreen
ผู้ใช้งานได้นานขึ้นและใช้งานโปรแกรมอื่น ๆ ที่ใช้vi
คีย์ เป็นเรื่องธรรมดาที่ฉันจะตั้งโหมด "vi" เป็น bash แต่ฉันยังทำงานกับเซิร์ฟเวอร์หลายร้อยเครื่องในงานของฉันส่วนใหญ่ถูกตั้งค่าเป็นโหมด "emacs" เริ่มต้น ดังนั้นฉันต้องใช้ทั้งสองโหมด แต่มันเป็นเพียงเรื่องของการตั้งค่า
ssh
ใช้งาน แน่นอนว่ามันไม่ได้ช่วยอะไรตอนที่ฉันใช้เครื่องจักรที่ไม่มี.bashrc
สิ่งของอยู่
ข้อได้เปรียบหลักคือการแก้ไขคำสั่งของคุณ หากคุณคุ้นเคยกับ Vim และชอบปรัชญาของผลประโยชน์จะต้องชัดเจน หากคุณมีประสบการณ์กับหน่วยความจำของกล้ามเนื้อนิ้วของคุณจะทำให้คุณแก้ไขคำสั่งทุบตีของคุณในความเร็วฟ้าผ่า
หมายเหตุ : หากคุณไม่ชอบการแก้ไข modal คุณยังควรเรียนรู้ที่จะใช้ประโยชน์จากโหมด emacs (ค่าเริ่มต้น) นี่คือบางส่วนแป้นพิมพ์ลัดที่ดีเป็นที่จะทำงานเกี่ยวกับกระบวนการใด ๆ ที่มีเช่นreadline
bash
หากคุณคุ้นเคยvi
คุณจึงตั้งเป็นโหมด vi เป็นตัวแก้ไขเชลล์ของคุณ นั่นเป็นเหตุผลที่ชัดเจน ส่วนอีกคนหนึ่งคือเมื่อbash
ไม่สามารถใช้ได้โดยเริ่มต้นในบางระบบปฏิบัติการ (ส่วนใหญ่ใช้ระบบปฏิบัติการยูนิกซ์เช่น AIX, Solaris) ดังนั้นประวัติเปลือกไม่สามารถใช้ได้ดังนั้นวิธีที่คุณได้รับคำสั่งที่ผ่านมาโดยการตั้งค่าแก้ไขเปลือกvi
และEsc, Ctrl+ KหรือCtrl+L
มันสามารถช่วยให้คุณนำทางและแก้ไขบรรทัดคำสั่งได้อย่างง่ายดายโดยใช้ทางลัดของกลุ่มเช่นเลื่อนไปทางขวาหนึ่งคำได้อย่างรวดเร็วลบคำ
โดยทางลัดเริ่มต้นเมื่อคุณต้องไปที่จุดสิ้นสุดของบรรทัดคุณต้องCtrl+ eในขณะที่set -o vi
คุณเพิ่งกด$
เช่นในกลุ่ม
อาจจะช้าไปงานปาร์ตี้ แต่สำหรับฉันที่ใช้โหมด vi เป็นเรื่องเกี่ยวกับการสร้าง Scrips เชิงโต้ตอบ ..
for i in `ls | grep -v gz`
do
echo $i
gzip $i
done
ตัวอย่างง่ายๆของสิ่งที่อาจจะค่อนข้างซับซ้อน .. การใช้ESCkvทำให้คุณเข้าสู่เซสชัน vi ที่คุณสามารถปรับเปลี่ยนสคริปต์และจากนั้น:wq
มันจะทำงาน
vi
โหมด แต่เป็นตัวอย่างที่ดีของรหัส bash (1) การใช้เอาต์พุตจากls
เป็นอินพุตกับการประมวลผลประเภทอื่น ๆ เป็นความคิดที่ไม่ดี (2) $(…)
ไวยากรณ์สำหรับการทดแทนคำสั่งถูกพิจารณาอย่างกว้างขวางว่าอ่านได้ง่ายกว่า`…`
ไวยากรณ์ (3) คุณควรอ้างอิงตัวแปรเชลล์ทุกครั้งยกเว้นว่าคุณไม่มีเหตุผลที่ดีและคุณแน่ใจว่าคุณรู้ว่าคุณกำลังทำอะไรอยู่