Làm thế nào để xóa một phần của một đường dẫn trong một vỏ tương tác?


19

Có một phím tắt trong bash và zsh để xóa một thành phần của một đường dẫn không? Ví dụ: nếu tôi nhập ls ~/local/color/và con trỏ ở cuối dòng, có lối tắt nào để xóa color/ở cuối không? Lý tưởng nhất là tôi muốn các giải pháp ở cả chế độ vi và chế độ emacs

Câu trả lời:


25

Các lệnh được sử dụng phổ biến nhất trong chế độ bash emacs mặc định , cho hầu hết các bàn phím được sử dụng phổ biến:

Phong trào

  • Ctrl- p, hoặc Up: lệnh trước
  • Ctrl- n, hoặc Down: lệnh tiếp theo
  • Ctrl- b, hoặc Left: ký tự trước
  • Ctrl- f, hoặc Right: nhân vật tiếp theo
  • Alt- b: từ trước
  • Alt- f: từ tiếp theo
  • Ctrl- a, hoặc Home: bắt đầu lệnh
  • Ctrl- e, hoặc End: kết thúc lệnh

Chỉnh sửa

  • BkSpc: xóa ký tự trước
  • Ctrl- d, hoặc Del: xóa ký tự hiện tại
  • Alt- BkSpc: xóa từ sang trái
  • Alt- d: xóa từ sang phải
  • Ctrl- u: xóa để bắt đầu lệnh
  • Ctrl- k: xóa đến hết lệnh
  • Ctrl- y: dán lần cắt cuối

Miscellanea

  • Cltr- /: hoàn tác
  • Cltr- r: tìm kiếm lịch sử lạc hậu gia tăng

2
Bổ sung: đặt lối tắt cho mục đích này trong zshbindkey [key] vi-backward-kill-word
Vayn

Cảm ơn. Tôi đã thêm tệp này vào tệp ~ / .zshrc và nó hoạt động tốt với tôi khi tôi nhấn Alt + Backspace: bindkey "^ [^?" vi-lùi-giết-từ. Nó không lý tưởng.
Tim Stewart

Alt-Bckspc và Alt-d hoạt động tốt với các filepath mà tôi đã thử. (trên bash)
demure

10

Cũng có unix-filename-ruboutcho 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-ruboutlà câu trả lời chính xác cho câu hỏi được hỏi khi nó xóa dấu gạch chéo hoặc khoảng trắng, trong khi đó Alt-BkSpcsẽ dừng lại ở các ký tự như dấu gạch nối, dấu gạch dưới, dấu chấm, v.v.
Steve

6

Theo mặc định bash (và tôi đoán zsh) sẽ ở chế độ emacs. Bạn có thể thử một cái gì đó như thế này:

Esc + bsẽ đặt con trỏ trở lại một từ. Ctrl + ksẽ xóa cho đến hết dòng.

Hầu hết các shell hiện đại (như bash) sẽ thực hiện các tính năng chỉnh sửa dòng lệnh nâng cao. Các lệnh này gần với chỉnh sửa emacs (Ctrl + A cho đầu dòng, Ctrl + E cho cuối dòng, ...).

Nếu bạn quen thuộc với các biên tập viên giống như vi, bạn có thể thử cho phép chế độ vi.

set -o vi

Nó cung cấp cho các chế độ giống như vi của bạn (chế độ lệnh / chế độ chèn) và bạn có quyền truy cập vào các lệnh tiêu chuẩn (d để xóa, r để thay thế, ...)

Trong Vi Mode, đây là cách bạn sẽ làm những gì bạn mô tả:

Esc (command mode); d; b.

1
Tôi sẽ không nói "Chỉnh sửa dòng lệnh thậm chí còn mạnh mẽ và hoàn thiện hơn ở chế độ vi", chế độ emacs có các lệnh để làm mọi thứ bạn có thể làm trong chế độ vi .
enzotib

Tôi thừa nhận tôi đã mang đi một chút. Tôi sẽ viết lại điều này.
rahmu

Cảm ơn đã nhắc nhở tôi có chế độ vi trong bash, vì vậy tôi có thể sử dụng dbtrong kịch bản này trong bash. Tôi cũng tìm thấy vi-backward-kill-wordtrong zsh là những gì tôi muốn, và nó thuận tiện hơn so với đặt chế độ vi trong bash. Nhưng tôi vẫn muốn tìm một lối tắt chế độ emacs cho mục đích này trong bash.
Vayn

Hoặc "alt-bC". Cách này không để lại một ký tự dấu, dbtrong một số trường hợp.
Wildcard
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.