Saya tahu saya bisa menggunakannya Upuntuk beralih melalui perintah sebelumnya. Menjalankan perintah terakhir hanya melibatkan Up+ Enter. Namun, saya berpikir untuk membeli Keyboard Happy Hacking karena saya menghabiskan banyak waktu di vim
.
Keyboard ini tidak memiliki tombol panah, dan satu-satunya cara saya tahu cara mendapatkan perilaku seperti ini adalah dengan menekan Ctrl+ Rdan mulai mengulangi perintah saya sebelumnya.
Apakah ada cara mudah untuk meniru Up+ Enterdi terminal UNIX tanpa tombol panah?
shell
keyboard-shortcuts
command-history
bergalah
sumber
sumber
Jawaban:
Dengan
csh
atau shell menerapkancsh
-seperti substitusi sejarah (tcsh
,bash
,zsh
):Lalu Enter.
Atau sebagai alternatif :
Lalu Enter.
Atau Ctrl+ P,Enter
Ruang ajaib
Juga, perhatikan itu
!!
dan!-1
tidak akan meluas secara otomatis untuk Anda, sampai Anda mengeksekusinya (ketika mungkin sudah terlambat).Jika menggunakan
bash
, Anda dapat memasukkannyabind Space:magic-space
ke dalam~/.bashrc
, kemudian menekan Spacesetelah perintah akan secara otomatis memperluasnya sebaris, memungkinkan Anda untuk memeriksanya sebelum eksekusi. Ini sangat berguna untuk ekspansi sejarah dari perintah yang dijalankan beberapa waktu lalu, mis.!echo
Akan menarik perintah terakhir yang dimulai dengan perintahecho
. Dengan ruang ajaib, Anda bisa melihat pratinjau perintah sebelum dijalankan.Itu sama dengan melakukan
bindkey ' ' magic-space
ditcsh
atauzsh
.sumber
magic-space
itu salah satu pilihan yang manis!histverify
opsishopt
yang akan menyebabkan readline untuk melakukan ekspansi histori tetapi tidak menjalankan perintah pada penekanan pertama dari tombol enter. Yang akan membiarkan Anda mengevaluasi hasilnya dan memutuskan apakah itu yang ingin Anda jalankan.!!
adalah menggunakan ekspansi di tempat . Sebagai contohsudo !!
.Kebanyakan shell yang memiliki fitur pengeditan baris perintah mendukung binding kunci Emacs. (bagian kecil)
Atau, Anda dapat mengatur shell Anda untuk menggunakan mode edit perintah vi, dengan menambahkan
set -o vi
file startup shell Anda (mis.,~/.bashrc
). Lalu, misalnya, Anda bisa!!
). Kunci minus -juga berfungsi sebagai perintah "naik".!-12
).vi
modus perintah, sehingga Anda akan perlu menggunakanvi
perintah editing (misalnya, I, A, C, R, atau rekan-rekan satu dari huruf kecil mereka) untuk benar-benar menambah perintah dari sejarah.Jadi, misalnya, EsckisudoSpaceEntersetara dengan
sudo !!
.!-2:- !$
. (Sayangnya, sepertinya tidak mendukung buffer bernama.)sumber
vi
triknya hebat !!!delete
Ctl + u di ZshYang favorit saya adalah CTRL+ Plalu CTRL+O
Ini berfungsi secara default, tidak diperlukan konfigurasi tambahan. ^ P akan membiarkan Anda beralih ke perintah terakhir dan ^ O akan membiarkan Anda mengeksekusi baris saat ini
Perhatikan bahwa CTRL+ Odapat digunakan sebanyak yang Anda inginkan
sumber
^J
ls
ataupwd
sebelumnya.Tentu! Karena Anda terbiasa dengan
vi
keybindings, mengapa tidak mengkonfigurasi shell Anda untuk meresponsnya? Untukbash
, letakkan ini di~/.inputrc
:Menjalankan instance bash tidak akan membaca ulang file, jadi logout dan kembali.
zsh
bahkan akan mendeteksi ini untuk Anda: jika tidak ada skrip startup Anda yang memaksakan mode pengeditan satu arah atau yang lain menggunakanbindkey
dan jika$EDITOR
variabel lingkungan Anda terdeteksi mengandungvi
, maka itu secara otomatis akan mengaktifkanvi
ikatan kunci. Jika Anda perlu memaksanya, letakkan ini di~/.zshrc
:Setelah itu, gunakan ESCseperti biasa untuk memasukkan baris perintah dan kdan juntuk bergerak ke atas dan ke bawah.
JUGA : Bindings shell default di sebagian besar shell adalah binding emacs, jadi sebenarnya Crtl-Pdan Ctrl-Nseharusnya sudah berfungsi tanpa Anda harus mengubah apa pun.
sumber
Dengan shell POSIX melaksanakan Pengguna Portabilitas pilihan (termasuk
ksh
,zsh
,bash
,yash
), Anda juga dapat menggunakanfc
perintah:Lihat sebuah contoh:
Info selengkapnya di Jalankan serangkaian perintah dari jawaban riwayat oleh Jonathan Leffler.
sumber
Untuk semua pengguna Mac iterm2 Anda:
Anda dapat mengikat ⌘+ Rke
0x0C 0x10 0x0d
. Ini akan menghapus terminal dan menjalankan perintah terakhir.sumber
0x10 0x0d
(yaitu hilangkan0x0C
).Saya merasa saya perlu mengulang perintah sebagai pengguna super sering, jadi
redoes perintah sebelumnya seolah-olah saya ingat untuk mengetik
sudo
di tempat pertama.sumber
The
ksh
shell memiliki alias standarr
yang berulang perintah terbaru. Ini terikat padafc -s
:Menariknya,
bash
dokumentasi untukfc
builtin (help fc
, dan juga dalam manual itu sendiri) bahkan menyebutkan ini, tetapi itu bukan alias default di shell itu:Dalam
bash
, ini juga akan berfungsi bahkan jika Anda telah menonaktifkan ekspansi sejarahset +H
.Di
zsh
shell, adar
builtin yang didokumentasikan sama denganfc -e -
.The
fc
utilitas utilitas standar POSIX .sumber
Dengan
csh
atau shell menerapkancsh
-seperti substitusi sejarah (tcsh
,bash
,zsh
), Anda juga dapat menggunakan!<beginning of command>
untuk memanggil perintah terakhir dimulai dengan<beginning of command>
.misalnya jika Anda berlari
!ta
akan mengeksekusitail file.txt
sumber
tl; dr
!!
hanya menambahkan perintah terakhir ke perintah Anda saat ini.<backtick>!!<backtick>
jalankan perintah terakhir dan tambahkan output ke perintah Anda saat ini.Sebenarnya ada 2 varian:
Izinkan saya menunjukkan kepada Anda 2 contoh:
Contoh 1
Seperti yang Anda lihat di atas, saya menjalankan perintah dan pada dasarnya hanya menambahkan perintah terakhir.
Variasi lain
Contoh 2
sumber
vi `!!`
. Sangat bergunaKetika saya menggunakan emulator xterm yang baik, misalnya dempul, cara favorit saya untuk melanjutkan adalah memilih perintah termasuk umpan baris, salin ke clipboard dan kemudian gunakan klik kanan pada mouse untuk menempelkannya. Ini mengulangi perintah dalam satu klik. Ini juga berfungsi dengan baik untuk urutan perintah yang dipisahkan oleh semi-titik dua.
sumber
Anda dapat menggunakan
!n
untuk menjalankan perintah ke-n di terminal. di mana 'n' adalah no barishistory
perintah.sumber
!?
ke perintah terakhir? Apakah Anda yakin tidak mencampuradukkannya!!
(yang sudah tercakup dalam jawaban lain)?Ketikkan History dan catat nomor di depan perintah yang Anda jalankan dan gunakan
!number
Anda juga dapat menggunakan ! -1 (1 sebagai perintah terakhir yang Anda jalankan, ganti dengan nomor hitung yang Anda dapatkan saat melakukannya dari bawah agar yang terakhir dieksekusi sebagai 1)
sumber
Ada beberapa lapisan di mana Anda dapat meminta perintah terakhir.
Editor baris
Editor baris (tempat Anda mengetik perintah) disediakan langsung oleh ksh, oleh pustaka baris baca di bash, dan oleh pustaka zle di zsh. Kerang lain, seperti dasbor mungkin tidak memiliki pustaka pengeditan untuk memahami kunci ini (kecuali dikompilasi dengan
--with-libedit
opsi yang diaktifkan).Ini bekerja di ksh, bash, zsh:
Ctrl- P# Mode Emacs (sebelumnya)
Ctrl- N# Mode Emacs (berikutnya)
ESC- k # vi mode ESC untuk pergi ke mode perintah dan k untuk naik
ESC- j # vi mode ESC untuk pergi ke mode perintah dan j untuk turun
sejarah
Sistem sejarah yang disediakan oleh banyak shell memungkinkan perluasan beberapa pintasan:
perintah
Ada beberapa perintah yang dapat mengambil perintah sejarah.
Seperti perintah cukup verbose (hanya untuk mencetak):
atau perintah yang lebih tua dan karena itu biasanya lebih portabel
fc
(langsung dijalankan kembali):Atau mungkin yang lebih sederhana
fc -s -1
, tetapi zsh tidak menerima opsi untuk fc.Jika Anda ingin hanya mencetak perintah, gunakan:
fc -nl -1 -1
.Untuk mengedit, mengatur
FCEDIT
ke editor teks (ex, ed, emacs, vi, dll) dan menggunakan fc langsung:fc -1
.sumber