Saya hanya mengetik sesuatu di sepanjang baris:
mv foo/bar/poit/zoid/narf.txt
dan tiba-tiba menyadari, sial, aku harus mengetik sebagian besar parameter itu lagi
mv foo/bar/poit/zoid/narf.txt foo/bar/poit/zoid/troz.txt
Bahkan dengan penyelesaian tab, cukup menyakitkan. Saya tahu saya dapat menyalin tempel parameter dengan memilih mouse teks dan middleclick tapi itu tidak cukup baik. Saya ingin tetap menggunakan keyboard.
Jadi apakah ada cara untuk menyalin tempel parameter saat ini dari garis menggunakan keyboard?
bash
readline
line-editor
k0pernikus
sumber
sumber
mv foo/bar/poit/zoid/{narf.txt,troz.txt}
alih-alih mengetik atau menyalin alamat panjang dua kali.mv foo/bar/poit/zoid/{narf,troz}.txt
. Ini bekerja sangat baik jika kita memiliki sesuatu seperti.../zoid/this_source_file_has_to_be_patched.c{,.orig}
Jawaban:
Jika saya sudah merencanakan ke depan, saya menggunakan ekspansi brace . Pada kasus ini:
Berikut adalah pendekatan lain menggunakan
readline
pintasan keyboard default :mv foo/bar/poit/soid/narf.txt
: mulaiunix-word-rubout
untuk menghapusfoo/bar/poit/soid/narf.txt
yank
, ruang,yank
lagi untuk mendapatkanmv foo/bar/poit/soid/narf.txt foo/bar/poit/soid/narf.txt
backward-kill-word
dua kali untuk menghapus yang terakhirnarf.txt
troz.txt
: ketikkan bagian ekor yang berbedaJika Anda menghabiskan waktu non-sepele menggunakan
bash
shell, saya akan merekomendasikan secara berkala membaca daftar cara pintas default dan memilih beberapa yang tampaknya berguna untuk dipelajari dan dimasukkan ke dalam rutinitas Anda. Bab 8bash
manual ini adalah tempat yang baik untuk memulai. Mengetahui cara pintas dapat benar-benar meningkatkan efisiensi Anda.sumber
.txt
, Anda bisa menekan Ctrl + Kiri (atau pintasan lain yang memanggilbackward-word
), lalu Kiri satu karakter, lalu Alt + Backspace dan ketiktroz
.Ekspansi sejarah sebenarnya bekerja pada perintah saat ini juga, menggunakan event designator
!#
. Gabungkan ini dengan kata designator untuk argumen terakhir -$
- untuk mendapatkan parameter yang baru saja Anda ketik. Dan Anda dapat menggunakan semua pengubah reguler di atasnya, jadi jika, misalnya, Anda mengganti nama file di direktori yang jauh, Anda cukup mengetik:sumber
magic-space
opsi bash di inputrc untuk secara otomatis memperluas ekspansi sejarah. (Saya tidak bisa menggunakan jawaban terpilih karena saya telah menetapkan ^ W untuk memecah karena biasanya lebih bermanfaat.)alt+backspace
biasanya sudah berhenti di pembatas kata seperti garis miring, jadi Anda tidak perlu mengubah cara^W
mendapatkan fungsionalitas itu, Anda dapat menghapus kata-kata yang dipisahkan dengan non-kata-karakter atau spasi-spasiSeperti dalam contoh Anda, Anda dapat menggunakan konstruksi berikutnya:
atau bahkan (seperti yang disarankan Ansgar Esztermann ):
bukannya mengetik atau menyalin alamat panjang dua kali.
sumber
Bermain-main saya berhasil ini:
Tekan Enter
untuk menyimpan parameter terakhir.
Sekarang gunakan ↑untuk mendapatkan yang terakhir diketik dalam antrean. Masukkan spasi dan untuk menggunakan parameter yang terakhir digunakan:
Alt + .
Saya benci memprovokasi kesalahan, tapi itu menyelesaikan pekerjaan dalam use case ini.
sumber
Anda dapat dengan mudah menggunakan variabel:
Atau di kasus Anda (kompetisi tab catatan bekerja untuk sebuah bagian):
sumber
Saya memiliki ini di
~/.inputrc
:!#
adalah baris saat ini,:$
adalah kata terakhir, dan\e^
adalahhistory-expand-line
.sumber
Sebab
zsh
, saya menemukan keybindings berikut bermanfaat.Jadi saya menekan Alt- Muntuk mengulangi argumen terakhir Alt- Kjika saya ingin menghapus bagian dari ujung jalan.
Berikut ini adalah referensi yang berguna untuk beberapa perilaku yang dapat Anda petakan.
sumber
Solusi dua langkah interaktif pendek
mengetik:
echo foo/bar/poit/zoid/narf.txt
Hal ini membuat
foo/bar/poit/zoid/narf.txt
tersedia untuk Alt- .shortcut di bash.ketik:
mv
dan hit Alt- ., Space, Alt-.Anda akan mendapatkannya
mv foo/bar/poit/zoid/troz.txt foo/bar/poit/zoid/troz.txt
. Sekarang Anda dapat memodifikasi kata terakhir dengan mudah.Komandan Tengah Malam
Alat ini yang mungkin (sangat) berguna adalah pengelola file yang berjalan di konsol. Ini memberi Anda kemungkinan untuk menyalin nama file dan jalur direktori secara interaktif ke dalam baris perintah. Midnight Commander menunjukkan kepada Anda karena itu 2 panel (kiri dan kanan), yang berisi daftar isi dari direktori yang berbeda.
Panduan singkat:
Sejauh ini, ini adalah cara tercepat yang saya temukan - setelah saya terbiasa dengan jalan pintas.
sumber
Gunakan hal yang sama di {,} "duplikator". Yaitu:
sumber