Bagaimana cara menghapus bagian dari jalur di shell interaktif?


19

Apakah ada pintasan di bash dan zsh untuk menghapus satu komponen jalan? Misalnya, jika saya mengetik ls ~/local/color/, dan kursor berada di ujung baris, apakah ada cara pintas untuk menghapus color/di akhir? Idealnya saya ingin solusi dalam mode-vi dan mode-emacs

Jawaban:


25

Perintah yang paling umum digunakan dalam mode bash emacs default , untuk keyboard yang paling sering digunakan:

Gerakan

  • Ctrl- p, atau Up: perintah sebelumnya
  • Ctrl- n, atau Down: perintah selanjutnya
  • Ctrl- b, atau Left: karakter sebelumnya
  • Ctrl- f, atau Right: karakter berikutnya
  • Alt- b: kata sebelumnya
  • Alt- f: kata selanjutnya
  • Ctrl- a, atau Home: mulai dari perintah
  • Ctrl- e, atau End: akhir perintah

Editing

  • BkSpc: hapus karakter sebelumnya
  • Ctrl- d, atau Del: hapus karakter saat ini
  • Alt- BkSpc: hapus kata ke kiri
  • Alt- d: hapus kata di sebelah kanan
  • Ctrl- u: hapus untuk memulai perintah
  • Ctrl- k: hapus ke akhir perintah
  • Ctrl- y: tempelkan potongan terakhir

Miscellanea

  • Cltr- /: batalkan
  • Cltr- r: penelusuran riwayat terbelakang inkremental

2
Komplemen: atur pintasan untuk keperluan ini di zshbindkey [key] vi-backward-kill-word
Vayn

Terima kasih. Saya menambahkan ini ke file ~ / .zshrc saya dan berfungsi dengan baik ketika saya menekan Alt + Backspace: bindkey "^ [^?" vi-backward-kill-word. Itu tidak ideal.
Tim Stewart

Alt-Bckspc dan Alt-d berfungsi dengan baik dengan filepath yang telah saya coba. (on bash)
demure

10

Ada juga unix-filename-ruboutuntuk Readline!

# in ~/.inputrc
# press ctrl-b to delete unix filename parts
# see: man bash | less -p 'unix-filename-rubout' and
#      http://www.calmar.ws/vim/vi-bash.html
set editing-mode vi
set keymap vi
"\C-b": unix-filename-rubout

2
IMHO unix-filename-ruboutadalah jawaban yang benar untuk pertanyaan yang ditanyakan karena menghapus ke garis miring atau spasi, sedangkan Alt-BkSpcakan berhenti pada karakter seperti tanda hubung, garis bawah, titik, dll.
Steve

6

Secara default bash (dan saya menebak zsh) akan berada dalam mode emacs. Anda dapat mencoba sesuatu seperti ini:

Esc + bakan meletakkan kursor kembali satu kata. Ctrl + kakan menghapus sampai akhir baris.

Sebagian besar shell modern (seperti bash) akan mengimplementasikan fitur pengeditan baris perintah lanjutan. Perintah-perintah itu dekat dengan pengeditan emacs (Ctrl + A untuk awal baris, Ctrl + E untuk akhir baris, ...).

Jika Anda familier dengan editor vi-like, Anda bisa mencoba untuk mengizinkan vi-mode.

set -o vi

Ini memberikan shell Anda seperti mode (mode perintah / mode insert), dan Anda mendapatkan akses ke perintah standar (d untuk menghapus, r untuk mengganti, ...)

Dalam Mode Vi, inilah cara Anda akan melakukan apa yang Anda jelaskan:

Esc (command mode); d; b.

1
Saya tidak akan mengatakan "Pengeditan baris perintah bahkan lebih kuat dan lengkap dalam mode-vi", mode emacs memiliki perintah untuk melakukan semua yang dapat Anda lakukan dalam mode vi .
enzotib

Saya akui saya agak terhanyut. Saya akan ulangi ini.
rahmu

Terima kasih telah mengingatkan saya ada mode-vi di bash, jadi saya bisa menggunakan dbskenario ini di bash. Saya juga menemukan vi-backward-kill-worddi zsh apa yang saya inginkan, dan lebih nyaman daripada mengatur vi-mode di bash. Tapi saya masih ingin mencari jalan pintas mode emacs untuk keperluan ini di bash.
Vayn

Atau "alt-bC". Cara ini tidak meninggalkan karakter yang tertinggal, yang dbtidak dalam beberapa kasus.
Wildcard
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.