penyelesaian tab kiri dalam bash atau zsh

2

Ketika saya menggunakan penyelesaian tab standar dalam bash atau zsh, saya mengetik bagian pertama nama file atau jalur, lalu tekan untuk menyelesaikan kata. Ini berfungsi baik kecuali saya berada di direktori yang penuh dengan file di mana semua variasi dalam nama file ada di akhir kata, mis. Direktori yang penuh dengan file bertanda waktu yang semuanya diawali dengan awalan yang sama:

foo-20120701124501.log
foo-20120701124531.log
foo-20120701124601.log
foo-20120701124631.log
foo-20120701124701.log
foo-20120701124731.log

Dalam hal ini, jika saya mengetik foo<tab> Saya akan mendapatkan foo-20120701124 - Saya bisa tab lagi, dan melihat semua file ... Saya harus mengetikkan 3 karakter berikutnya untuk mendapatkan nama file yang unik.

Saya ingin tahu apakah ada cara untuk mengetik misalnya 4731.log dan kemudian melengkapi awal kata. Saya menduga bahwa ini akan sulit di bash, karena bash selesai digunakan $COMP_CWORD dan $COMP_KEY untuk penyelesaian yang dapat diprogram, dan dari cara saya membacanya, saya tidak berpikir bahwa mereka akan memungkinkan untuk penyelesaian kata ke kiri. Saya tidak cukup tahu tentang penyelesaian di dalam zsh untuk mengetahui di mana harus mulai mencari di halaman manual.

Barton Chittenden
sumber

Jawaban:

2

Ini hanya akan berfungsi jika ada perintah yang memimpin sebelum menekan tab. Kemungkinan bukan apa yang Anda cari tetapi satu-satunya adalah saya bisa mendapatkan hasil yang diinginkan. Contoh di bawah ini akan berfungsi dalam kasus Anda. Anda hanya perlu berada di akhir * 4731.log dan tekan tab 1 kali. Jika unik maka akan dilengkapi secara otomatis.

ls *4731.log
Lipongo
sumber
Yap, bekerja seperti mantra. Saya menghasilkan serangkaian file menggunakan for i in {1..10}; do touch $(date -d "$i days $RANDOM seconds ago" +%Y%m%d%H%M%S); done... ini menciptakan serangkaian file yang terlihat seperti 20120915165427 20120916121328 20120917180952 dll. Jika saya menggunakan ls *09<tab>, itu tidak berkembang, tapi *09*<tab> tidak.
Barton Chittenden