วิธีการตั้งค่าและกำหนดโหมดแก้ไขบรรทัดคำสั่งของ Bash


10

วิธีการตั้งค่าviหรือemacsโหมดแก้ไขบรรทัดคำสั่ง Bash และวิธีการกำหนดโหมดที่ตั้งอยู่ในปัจจุบัน?

คำตอบ:


6

เนื่องจากคำถามของคุณเฉพาะเจาะจงเกี่ยวกับการทุบตี:

หากต้องการตั้งค่าอย่างถาวรสำหรับทุกเซสชันใหม่:

echo 'set -o vi' >> ~/.bashrc

หรือ (แนะนำ) เพิ่ม (หรือเปลี่ยน) บรรทัดใน ./inputrc:

set editing-mode vi

นี่จะเป็นการตั้งค่าโหมดการแก้ไขของ readline ซึ่งถูกใช้โดยโปรแกรมอื่น ๆ อีกหลายตัวนอกเหนือจาก bash

ง่ายต่อการยกเลิกการตั้งค่าตัวเลือกทั้งสอง:

shopt -ou vi emacs

หากต้องการตั้งค่าอย่างใดอย่างหนึ่ง:

set -o vi

หรือ

shopt -os vi

emacsสำหรับเดียวกัน การตั้งค่าviunsets emacsและ viceversa

ในการแสดงรายการรัฐ:

$ shopt -op emacs
set +o emacs

$ shopt -op vi
set -o vi

หรือทั้งสองอย่างในครั้งเดียว:

$ shopt -op emacs vi
set +o emacs
set -o vi

วิธีทดสอบว่าviตั้งค่าไว้หรือไม่:

shopt -oq vi      &&   echo vi is set

หรือ (ไวยากรณ์ ksh):

[[ -o vi ]]        &&   echo vi is set

emacs:

shopt -oq emacs   &&   echo emacs is set

หรือ:

[[ -o emacs ]]    &&   echo emacs is set

หรือเพื่อทดสอบว่าไม่มีการตั้งค่าตัวเลือก:

! ( shopt -oq emacs || shopt -oq vi ) && echo no option is set

16

ถึงset:

set -o vi

หรือ:

set -o emacs

(การตั้งค่าหนึ่งยกเลิกการตั้งค่าอื่นคุณสามารถทำได้set -o vi +o viเพื่อยกเลิกการตั้งค่าทั้งสอง)

เพื่อตรวจสอบ:

if [[ -o emacs ]]; then
  echo emacs mode
elif [[ -o vi ]]; then
  echo vi mode
else
  echo neither
fi

kshไวยากรณ์ที่มาจาก set -o viเป็น POSIX set -o emacsไม่ได้ (ตามที่ Richard Stallman คัดค้านemacsโหมดที่ระบุโดย POSIX) แต่พบได้บ่อยในหมู่การใช้งานเชลล์ เชลล์บางตัวรองรับโหมดแก้ไขพิเศษ [[ -o option ]]ไม่ใช่ POSIX แต่รองรับโดย ksh, bash และ zsh [ -o option ]โดยได้รับการสนับสนุนbash, kshและyash(ทราบว่า-oยังเป็นไบนารีหรือผู้ประกอบการสำหรับการ[)


มันใช้งานได้และเป็นที่น่าแปลกใจว่ามันยากที่จะกำหนดโหมด
Blcknx

4
set -o | egrep -w '^emacs|vi'จะกลับมาไม่ว่าจะเป็น emacs หรือ vi
Stephen Harris

4

bind -V | grep editing-modeนอกจากนี้ยังมี

man bash มีขนาดใหญ่ แต่คุ้มค่าการอ่านในเชิงลึก

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