Câu trả lời:
Vì câu hỏi của bạn là cụ thể về bash:
Để đặt nó vĩnh viễn cho mỗi phiên mới:
echo 'set -o vi' >> ~/.bashrc
hoặc (được khuyến nghị), thêm (hoặc thay đổi) một dòng trong ./inputrc:
set editing-mode vi
Điều này sẽ thiết lập chế độ chỉnh sửa của đường dẫn được sử dụng bởi một số chương trình khác bên cạnh bash.
Thật dễ dàng để bỏ đặt cả hai tùy chọn:
shopt -ou vi emacs
Để đặt một, một trong hai:
set -o vi
Hoặc là
shopt -os vi
Tương tự cho emacs
. Đặt cài vi
đặt emacs
và ngược lại.
Để liệt kê trạng thái:
$ shopt -op emacs
set +o emacs
$ shopt -op vi
set -o vi
Hoặc cả hai cùng một lúc:
$ shopt -op emacs vi
set +o emacs
set -o vi
Để kiểm tra nếu vi
được đặt:
shopt -oq vi && echo vi is set
Hoặc (cú pháp ksh):
[[ -o vi ]] && echo vi is set
emacs:
shopt -oq emacs && echo emacs is set
Hoặc là:
[[ -o emacs ]] && echo emacs is set
hoặc, để kiểm tra rằng không có tùy chọn nào được đặt:
! ( shopt -oq emacs || shopt -oq vi ) && echo no option is set
Tới set
:
set -o vi
Hoặc là:
set -o emacs
(đặt cái này bỏ cài đặt cái kia. Bạn có thể làm set -o vi +o vi
để bỏ đặt cả hai)
Để kiểm tra:
if [[ -o emacs ]]; then
echo emacs mode
elif [[ -o vi ]]; then
echo vi mode
else
echo neither
fi
Cú pháp đó đến từ ksh
. Các set -o vi
là POSIX. set -o emacs
không phải (vì Richard Stallman phản đối emacs
chế độ được chỉ định bởi POSIX) nhưng rất phổ biến trong các triển khai shell. Một số shell hỗ trợ các chế độ chỉnh sửa bổ sung. [[ -o option ]]
không phải là POSIX, nhưng được hỗ trợ bởi ksh, bash và zsh. [ -o option ]
được hỗ trợ bởi bash
, ksh
và yash
(lưu ý rằng -o
cũng là một nhị phân tử OR cho [
).
set -o | egrep -w '^emacs|vi'
sẽ trả về dù emacs hay vi được đặt.