Bagaimana saya bisa mengkonfigurasi Bash, Zsh atau Tmux untuk menyelesaikan pengidentifikasi cocok terakhir di layar ? Pertimbangkan skenario umum ini:
$ git fetch
remote: Counting objects: 16, done.
remote: Compressing objects: 100% (9/9), done.
remote: Total 9 (delta 4), reused 0 (delta 0)
Unpacking objects: 100% (9/9), done.
From /opt/git/thunder
* [new branch] issue540 -> origin/issue547314
e9204cf..4d42c3f v2.1 -> origin/v2.1
Bagaimana saya bisa mendapatkan Bash / Zsh / Tmux untuk menyelesaikan issue547
CLI dengan mudah? Ketika saya menekan Tabsetelah $ git checkout is
Git membantu menyelesaikan issue
, tetapi saya harus menyelesaikan digit sendiri karena semua digit sebelumnya benar-benar cocok dengan cabang Git yang ada .
Di VIM, menekan Ctrl+ Puntuk omnicomplete akan selesai seperti pertandingan sebelumnya, jadi dalam hal ini issue547314
sebenarnya akan selesai. Bagaimana saya bisa mendapatkan perilaku ini di Bash, di Zsh atau di Tmux ?
Saat ini saya menggunakan Bash 4.2 dan Tmux 1.10 pada Server Ubuntu (biasanya 12,04 LTS). Saya dapat memperbarui ke Ubuntu Server LTS terbaru (14,04) jika diperlukan.
EDIT : Saya tidak keberatan solusi yang menggunakan Bash, Zsh, atau Tmux selama tidak sulit untuk digunakan. Jadi Tabatau Ctrl+ Patau cara pintas lainnya akan baik-baik saja, tetapi tidak Alt+ Meta+ Super+ Shift+ א.
Jawaban:
Saya pikir fitur yang dicari OP disebut dabbrev-expand di dunia Emacs:
xterm
juga memilikidabbrev-expand
fitur tetapi itu sedikit kurang pintar dari rekan Emacs tetapi sangat berguna bagi saya dan salah satu alasan mengapa saya beralihxterm
. Di dalamxterm
jendela seseorang dapat menggunakan penjilidan kunci khusus yang ditentukan~/.Xresources
untuk memohondabbrev-expand
pada string yang diberikan. Sebagai contoh, saya memiliki entri berikut di~/.Xresources
(saya menggunakanuxterm
, versi Unicode xterm):Di dalam
xterm
jendela saya dapat menggunakanM-/
(ALT + /
) untuk memanggildabbrev-expand
.xterm
akan mencari semua string yang terlihat di layar yang dimulai dengan huruf yang saya ketikkan. Contoh:Jika saya menekan
M-/
sekarangxterm
akan berkembanga_v
menjadia_very_long_string
. Sayangnya, seperti yang saya katakanxterm
tidak begitu pintar dandabbrev-expand
fitur ini hanya akan bekerja pada string penuh. Jadi, dalam kasus Andais
akan diperluas keissue540
dan bukanissue547314
karenaissue547314
merupakan bagian dariorigin/issue547314
(pikirkan tentang hal itu seperti\b
dalam ekspresi reguler, itu agak mirip meskipun kebanyakan mesin ekspresi reguler akan menangkap kedua kemunculanissue
string\bissue.+\b
). Tapi , Anda bisa mengetikor
dan kemudian presM-/
.xterm
pertama akan memperluasor
keorigin/v2.1
, ini bukan apa yang kita inginkan jadi tekanM-/
lagi danxterm
akan memperluas keorigin/issue547314
. Sekarang, jika Anda menggunakan Bash yang dapat Anda lakukanM-b
,C-w
danC-e
untuk menghapusorigin/
bagian. Singkatnya,dabbrev-expand
di dalamxterm
tidak sebagus di Emacs (dan Vim saya kira) tapi itu masih lebih cepat daripada menulis ulang string panjang dengan tangan dan kurang rawan ketik. Dan dalam kebanyakan kasus itu akan berkembang langsung ke string yang diinginkan tanpa perlu menghapus bagian yang berlebihan. Anda hanya perlu membiasakan diri - lihat string yang ingin Anda miliki di kursor dan lihat apakah itu tidak diawali oleh sesuatu yang lain, dan jika itu adalah mengetik bagian sebelumnya dan menghapusnya setelah ekspansi.Catatan yang
xterm
tidak dikompilasi dengandabbrev-expand
fitur secara default dan Anda harus mengaktifkannya secara eksplisit. Namun, versixterm
dalam repositori Ubuntu dikompilasidabbrev-expand
dan Anda dapat menggunakannya segera.sumber
xterm
danuxterm
tidak dikompilasi untuk dabbrev-expand, saya tidak dapat menemukan fitur di-help
. Bagaimana saya bisa melihat flag kompilasi (seperti denganvim --version
)? Perhatikan bahwa saya juga mencoba garis config di~/.Xresources
sebagaiMeta <KeyPress> /: dabbrev-expand() \n\
seperti yang ditemukan di sini tapi itu tidak membantu, baik.xrdb -merge .Xresources
dalam xterm.zsh
memang memiliki fasilitas ini.Bash sebagai fasilitas serupa yang disebut bash completetion. Anda dapat memanfaatkannya dengan menekan Tabtombol saat memberikan argumen pada perintah saat Anda mengetiknya.
Contoh
Jika saya mulai dengan mengetik
ls
dan kemudian menekan Tabdua kali Anda akan mendapatkan Bash untuk memberikan daftar file yang cocok (dan saklar baris perintah) ke perintah apa pun yang Anda coba gunakan:Dan inilah contohnya dengan sakelar:
Mendirikan?
Instalasi saya sudah termasuk aturan untuk
git
:Instalasi file ini dilakukan ketika saya menginstal
git
paket. Saya menggunakan Fedora 19, tetapi distro lain harus melakukan ini juga.Melihat file aturan itu menjelaskan bahwa itu akan memfasilitasi penyelesaian otomatis dalam situasi berikut:
Jadi ini seharusnya "hanya bekerja" untuk Anda.
sumber
Anda dapat melakukan sesuatu seperti ini dengan extrakto :
prefix + tab
untuk memulai extraktotab
untuk memasukkannya ke panel saat ini,enter
untuk menyalinnya ke clipboard,ctrl-o
untuk membuka jalur / url atauctrl-e
untuk mengedit$EDITOR
sumber