iPython Suka Command History For Shell

24

Bagi Anda yang tidak melakukan pemrograman python di ubuntu, ipython adalah shell python pada steroid, tetapi ia memiliki fitur luar biasa yang tidak hanya dilengkapi secara otomatis berdasarkan nama yang dikenal (yaitu cara yang sama yang dilakukan bash saat Anda menekan tab), tetapi jika Anda mulai mengetik perintah dan menekan, itu tidak menggulir seluruh sejarah (seperti bash) tetapi hanya melalui perintah terbaru yang dimulai dengan string leter yang sama.

Jadi jika Anda melakukan beberapa perintah panjang seperti scp -r -P 8000 -l user server.com:~/dir/to/copy ./diikuti oleh beberapa perintah lainnya. Jika Anda mulai mengetik scpdan menekan, bash akan menampilkan perintah yang ditunjukkan sebelumnya alih-alih hanya menelusuri seluruh riwayat.

Apakah ada ekstensi seperti ini untuk bash? atau adakah shell yang menawarkan fitur semacam ini?

kasar
sumber

Jawaban:

26

Bash memang memiliki fitur itu juga, tetapi tidak diaktifkan secara default. Anda dapat mengikatnya untuk mengarahkan / menurunkan kursor dengan memasukkan ini ke ~/.inputrc:

"\e[A": history-search-backward
"\e[B": history-search-forward

Saya lebih suka mengikatnya ke Ctrl+ atas / bawah sebagai gantinya:

"\e[1;5A": history-search-backward
"\e[1;5B": history-search-forward

sunting: Untuk mempertahankan ctrl+leftdan ctrl+rightuntuk bergerak maju dan mundur dalam seluruh kata, sertakan juga baris-baris ini dalam ~/.inputrcfile:

# mappings for Ctrl-left-arrow and Ctrl-right-arrow for word moving
"\e[1;5C": forward-word
"\e[1;5D": backward-word
"\e[5C": forward-word
"\e[5D": backward-word
"\e\e[C": forward-word
"\e\e[D": backward-word
ak2
sumber
Dengan menggunakan tip ini, sekarang saya tidak dapat menggunakan Ctrl + kiri / kanan di terminal untuk melompat ke kata berikutnya / sebelumnya, yang merusak seluruh tujuan bagi saya. Mungkin ada solusinya?
zetah
@zetah saya edit ke jawaban solusi saya untuk memindahkan kata
wim
1
Untuk mempertahankan semua default Anda juga dapat menambahkan $include /etc/inputrc, lebih disukai di baris pertama.
Tulio Casagrande
9

Coba tekan Ctrl+ R, dan ketikkan beberapa huruf. Ini bekerja dalam urutan terbalik juga.

senapan
sumber
6

Dan jangan lupa pintasan ekspansi sejarah yang fantastis di bash. 1

Saya memposting beberapa kutipan dari manual, jika Anda belum mentato mereka di lengan Anda (atau menghafalnya).

   Event Designators  
       An event designator is a reference to a command line entry in the  his
       tory list.

       !      Start  a  history substitution, except when followed by a blank,
              newline, carriage return, = or ( (when the extglob shell  option
              is enabled using the shopt builtin).
       !n     Refer to command line n.
       !-n    Refer to the current command line minus n.
       !!     Refer to the previous command.  This is a synonym for `!-1'.
       !string
              Refer to the most recent command starting with string.
       !?string[?]
              Refer  to the most recent command containing string.  The trail‐
              ing ? may be omitted if string is followed immediately by a new‐
              line.
       ^string1^string2^
              Quick  substitution.  Repeat the last command, replacing string1
              with string2.  Equivalent to ``!!:s/string1/string2/'' (see Mod‐
              ifiers below).
       !#     The entire command line typed so far.

Saya sering menggunakan kemampuan untuk merujuk pada 'kata' terakhir dari perintah sebelumnya. Misalnya,

mkdir /foo/shmoo/adir.horribilus.foo
cp file1 file2 file3 file4 !$ 
ls -l !$

Dalam kedua kasus di sini, !$pertandingan/foo/shmoo/adir.horribilus.foo .


1 ... yang diambil dari csh. Untuk mengurangi lingkup pencurian fitur bash, halaman bash man mengatakan

   The shell supports a history expansion feature that is similar  to  the
   history  expansion in csh.  

Jadi, "mirip". Semua ini mungkin masuk cshatau tcsh. Atau csh keturunan mana pun yang tidak Anda gunakan karena fakta bahwa itu tidak sehebat itu bash.

belacqua
sumber
0

Ada alternatif yang mirip dengan apa yang @ ak2 sebutkan di atas , tetapi Anda tidak harus membuat file .inputrc baru.

Sebaliknya, jika Anda memiliki izin sudo, Anda dapat mengaktifkannya di file / etc / inputrc. Dalam file ini terdapat berbagai pengaturan keyboard termasuk fitur pencarian riwayat (setidaknya untuk 18,04). Kutipan dari / etc / inputrc adalah:

# alternate mappings for "page up" and "page down" to search the history
# "\e[5~": history-search-backward
# "\e[6~": history-search-forward

Cukup batalkan komentar pada dua baris terbawah menggunakan editor file sudo (mis. $ Sudo vim), dan sesi terminal baru akan memiliki fitur pencarian riwayat (untuk semua pengguna).

ascendant
sumber