Shells (setidaknya yang saya tahu) memiliki kemampuan mengedit perintah yang sangat buruk.
Sebagai contoh:
- Saya tidak bisa mengarahkan kursor ke titik perintah mana pun.
- Saya tidak bisa memilih dan mundur / menghapus / mengganti teks dalam perintah.
Saat ini sangat mengganggu, saya menggunakan gedit untuk mengedit perintah sebelum menempelkannya ke terminal.
Apakah ada solusi yang bagus untuk ini?
command-line
bash
gnome-terminal
UniversalUniqueID
sumber
sumber
Jawaban:
Bash sebenarnya cukup pandai dalam hal ini. Anda hanya perlu mempelajari cara pintasnya. Misalnya (dalam mode emacs default):
Dan masih banyak lagi. Baca
man readline
untuk melihat apa lagi yang tersedia. Anda dapat menetapkan cara pintas yang berbeda dengan menempatkannya~/.inputrc
. Misalnya, untuk membuat Ctrl+ Leftkembali satu kata dan Ctrl+ Rightmaju satu kata, tambahkan ini ke~/.inputrc
:Untuk mengetahui apa arti kode aneh itu, tekan Ctrl+ Vlalu tekan tombol yang ingin Anda gunakan. Jika Anda mencoba dengan Ctrl+ Right, Anda akan melihat
^[[1;5C
. Ganti^[
dengan\e
in~/.inputrc
.Anda mungkin juga ingin melihat kerang lain. Kerang "modern" yang populer dan kaya fitur termasuk:
sumber
gnome-terminal
Anda harus menggunakanESC
tombol alih-alihALT
menavigasi satu kata ke depan dan ke belakang. . .. atau beralih ke terminal yang tidak menggunakan Alt untuk menu aplikasi itu. . . seperti xterm atau sakuraAnda dapat mengedit perintah kosong atau diketik sebagian ke dalam editor pilihan Anda dengan mengatur
EDITOR
ke editor pilihan Anda dan dengan menekan CTRL+ X+ Eatau CTRL+ X/ CTRL+ E, yang membuka baris yang sedang diedit diEDITOR
;Misalnya, pengaturan
EDITOR
kegedit
akan membuat CTRL+ X+ Edan CTRL+ X/ CTRL+ Emembuka baris saat ini di Gedit.Untuk membuat ini solusi permanen, Anda dapat mengatur
EDITOR
di~/.bashrc
.Ini memungkinkan bahkan menggunakan editor teks grafis sepenuhnya untuk mengedit perintah; untuk menjalankan perintah yang diedit, cukup simpan dan tutup dokumen.
Fitur yang sama dapat diaktifkan di Zsh dengan menambahkan yang berikut ke
~/.zshrc
:sumber
fc
perintah jika variabel FCEDIT diatur. Jawaban yang bagus !fc
membuka perintah sebelumnya (yang bahkan lebih rapi dengan cara tertentu). Saya tidak tahu tentang itu, terima kasih!Terminal tidak memiliki kemampuan mengedit teks sendiri. Terminal menyediakan area teks dan menghubungkan keyboard ke sesuatu. Tetapi sesuatu yang Anda jalankan di dalam terminal menentukan apa yang dapat dilakukannya.
Kerang seperti
bash
biasanya adalah hal pertama yang Anda temukan berjalan di dalam terminal. Karena shell bekerja berdasarkan perintah, Anda hanya dapat mengedit perintah saat ini. bash menyediakan pengeditan perintah yang sangat baik dibandingkan dengan shell Bourne ataucsh
atauksh
itu bukanlah sesuatu yang Anda ingin sunting bahkan dengan cerita pendek.Editor teks adalah salah satu perintah yang dapat Anda gunakan dalam shell. Contoh utama adalah vim dan emacs .
vim
atauemacs
akan memberi Anda kemampuan untuk mengedit hampir semua hal. Keduanya mencakup lingkungan pemrograman bawaan untuk memperluas kemampuan mereka ke masalah apa pun yang Anda hadapi.Jadi solusinya adalah untuk memahami lebih baik apa yang dilakukan alat-alat ini dan dimaksudkan untuk melakukan dan memilih yang tepat untuk pekerjaan itu .
sumber
Biasanya terminal memungkinkan pemilihan teks dengan mouse, tetapi shell tidak dibuat sadar akan hal ini. Jadi sayangnya tidak
bash
,zsh
,fish
ataues
dapat mendukung editing mouse berbasis. Saya pikir untuk melakukannya, mereka perlu mengambil kendali lebih besar atas terminal.Namun (dan ini adalah sedikit peregangan) jika Anda membuka Vim atau GVim, dan kemudian masukkan perintah shell menggunakan:
maka Anda dapat mengklik mouse Anda untuk melompat ke mana saja di dalam barisan . (Anda harus
:set mouse=a
terlebih dahulu jika itu belum diaktifkan.) Tombol pengeditan dalam mode ini dapat dilihat dengan:help cmdline-editing
Vim juga memiliki mode histori perintah yang cukup kuat, yang dapat dicapai dengan menekan q:. Dari sana Anda dapat menarik, menghapus, dan menempel menggunakan perintah mode normal Vim. Dalam mode ini, Anda bisa mendapatkan pilih-dengan-mouse dan kemudian menghapus fitur yang Anda inginkan (dengan menekan d).
Peringatan penting di sini adalah bahwa Vim tidak benar-benar menjaga sesi live shell tetap berjalan. Setiap perintah yang Anda jalankan akan dijalankan dalam proses anak. Jadi setiap perubahan yang dibuat ke variabel lingkungan atau opsi shell oleh proses anak akan hilang.
Yang mengatakan, Anda dapat memodifikasi variabel lingkungan dari dalam proses Vim, dan menggunakannya dari baris perintah Vim, dan mereka bahkan akan diekspor ke proses anak:
Jadi, jika Anda mau berpura-pura bahwa Vim sebenarnya adalah sejenis shell aneh, maka Anda dapat menikmati fitur pengeditan lanjutan! Mungkin kekurangan terbesarnya adalah Anda harus memulai setiap perintah dengan mengetik salah satu
:!
atauq:
Oh dan omong-omong, jika Anda ingin mendapatkan output dari perintah shell ke buffer Vim Anda saat ini, Anda bisa melakukan itu seperti ini (tetapi berhati-hatilah itu akan mengganggu baris Anda saat ini):
sumber