Bagaimana cara mengatur dan menentukan mode pengeditan baris perintah dari Bash?

10

Bagaimana mengatur mode edit baris perintah viatau emacsBash DAN bagaimana menentukan mode mana yang saat ini ditetapkan?

Blcknx
sumber

Jawaban:

6

Karena pertanyaan Anda spesifik tentang bash:

Untuk mengaturnya secara permanen untuk setiap sesi baru:

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

atau (disarankan), tambahkan (atau ubah) suatu baris di ./inputrc:

set editing-mode vi

Ini akan mengatur mode pengeditan readline yang digunakan oleh beberapa program lain di samping bash.

Mudah untuk membatalkan kedua opsi:

shopt -ou vi emacs

Untuk mengatur satu, baik:

set -o vi

Atau

shopt -os vi

Sama untuk emacs. Pengaturan viunsets emacsdan sebaliknya.

Untuk daftar keadaan:

$ shopt -op emacs
set +o emacs

$ shopt -op vi
set -o vi

Atau keduanya sekaligus:

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

Untuk menguji apakah vidisetel:

shopt -oq vi      &&   echo vi is set

Atau (sintaks ksh):

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

emacs:

shopt -oq emacs   &&   echo emacs is set

Atau:

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

atau, untuk menguji bahwa tidak ada opsi yang ditetapkan:

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

Kepada set:

set -o vi

Atau:

set -o emacs

(pengaturan yang satu menghapus yang lain. Anda dapat melakukan set -o vi +o viuntuk membatalkan keduanya)

Untuk memeriksa:

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

Sintaksis itu berasal ksh. Ini set -o viadalah POSIX. set -o emacstidak (karena Richard Stallman keberatan dengan emacsmode yang ditentukan oleh POSIX) tetapi sangat umum di antara implementasi shell. Beberapa shell mendukung mode pengeditan tambahan. [[ -o option ]]bukan POSIX, tetapi didukung oleh ksh, bash dan zsh. [ -o option ]didukung oleh bash, kshdan yash(perhatikan -ojuga operator biner ATAU untuk [).

Stéphane Chazelas
sumber
Ini bekerja dan mengejutkan, bahwa sulit untuk menentukan modenya.
Blcknx
4
set -o | egrep -w '^emacs|vi'akan mengembalikan apakah emacs atau vi diatur.
Stephen Harris
4

Ada juga bind -V | grep editing-mode.

man bash sangat besar tapi layak dibaca secara mendalam.

pelajar
sumber