Làm thế nào tôi có thể xóa một dấu gạch chéo hoặc một từ trong zsh?


18

Hành vi Bash

Tôi mới chuyển bashđến zsh. Trong bash, tôi đã có dòng sau ~/.inputrc.

"\e\C-?": unix-filename-rubout

Do đó, Alt+ Backspacesẽ xóa trở lại dấu gạch chéo trước, rất hữu ích cho việc thay đổi đường dẫn đã nhập.

Ngoài ra, bashmặc định thực hiện Ctrl+ w xóa vào không gian trước đó, rất hữu ích để xóa toàn bộ đối số (giả sử chúng không có khoảng trắng).

Hành vi của Zsh

Trong zsh, cả Alt+ BackspaceCtrl+ wđều làm điều tương tự. Cả hai đều xóa từ trước đó, nhưng chúng quá tự do với những gì cấu thành từ ngắt, xóa đến từ trước -hoặc _. Có cách nào để zshhành xử tương tự bash? Nếu nó quan trọng, tôi đã oh-my-zshcài đặt.


1
Bạn có muốn thay đổi định nghĩa của zsh về những gì tạo thành một từ? Nếu vậy: unix.stackexchange.com/questions/48577/ Từ Hoặc bạn có muốn xác định một lệnh mới với định nghĩa khác của từ không?
Gilles 'SO- ngừng trở nên xấu xa'

@Gilles Tôi đoán là sự kết hợp của cả hai. Trong bash, tôi thường xuyên sử dụng hai lệnh riêng biệt: tức là xóa đến cuối cùng /và xóa đến ``. Chúng có chức năng khác nhau.
Sparhawk

1
@Gilles Vì vậy, có, liên kết đó hoạt động cho bashhành vi Alt + Backspace giống như của tôi , nhưng tôi vẫn thích bashhành vi Ctrl + w giống (khác nhau) , tức là xóa vào không gian cuối cùng.
Sparhawk

Câu trả lời:


14

Chỉnh sửa: Kết quả google tiếp theo sau câu hỏi của bạn là câu hỏi này với cùng một giải pháp: zsh: làm cho ALT + BACKSPACE dừng ở các ký tự không chữ và số

Câu trả lời này được cung cấp bởi /nick FoH#zsh trên freenode.

backward-kill-dir () {
    local WORDCHARS=${WORDCHARS/\/}
    zle backward-kill-word
}
zle -N backward-kill-dir
bindkey '^[^?' backward-kill-dir

Bằng cách này, bạn có thể sử dụng ctrl+wđể xóa một từ (trong vim lingo) và alt+bkspcđể xóa một từ


Xuất sắc! Cảm ơn đã dành thời gian để điều tra và trả lời.
Sparhawk

Re Google: ngoại trừ tôi đã hỏi câu hỏi của tôi chín tháng trước và họ đã hỏi họ chưa đầy một tháng trước.
Sparhawk

1
thời gian chỉ là một người đàn ông xây dựng xã hội! .. nhưng nghiêm túc, điểm công bằng.
JunkMechanic

19

Một câu hỏi tương tự đã được hỏi ở đây: zsh: stop backward-kill-word trên thư mục dấu phân cách

và một giải pháp khả thi được đưa ra: thêm các cài đặt này vào zshrc của bạn:

autoload -U select-word-style
select-word-style bash

Cảm ơn câu trả lời. Tuy nhiên, không có câu trả lời nào phù hợp với tôi. (Cụ thể, cái bạn trích dẫn không thay đổi.) Có thể, đó là vì tôi đã oh-my-zshcài đặt. Trong mọi trường hợp, điều này dường như không giải quyết hai chức năng và ràng buộc chính khác nhau theo câu hỏi của tôi. (Và nếu câu hỏi của tôi đã được nó lừa nó nên được đóng cửa như một dupe nào nó không phải là..)
Sparhawk

1
Bạn cần phải điều chỉnh biến WORDCHARS. Trong zsh thật dễ dàngvared WORDCHARS
Jshura

Nó sẽ chỉ là một bản sao nếu chúng tôi khớp nó với một câu hỏi được trả lời trong diễn đàn này .
Thomas Dickey

@ThomasDickey Ồ vâng, xin lỗi, tôi không nhận thấy tôi đã tráo đổi các trang web SE.
Sparhawk

@Jshura Không, theo câu hỏi, tôi muốn hai chức năng khác nhau, có thể có bash.
Sparhawk

5

Mở rộng câu trả lời của JunkMechanic , tôi muốn rằng

  • phím tắt zsh hiện có ( CtrlW, CtrlCtrl) hoạt động như trong giá trị mặc định zsh
  • Altphím tắt lương ( AltW, AltAlt) làm việc tương tự, nhưng "mịn hạt", ví dụ như lên đến gần nhất/

Đây là những gì tôi sử dụng bây giờ:

# Alt+Backspace
backward-kill-dir () {
    local WORDCHARS=${WORDCHARS/\/}
    zle backward-kill-word
}
zle -N backward-kill-dir
bindkey '^[^?' backward-kill-dir


# Alt+Left
backward-word-dir () {
    local WORDCHARS=${WORDCHARS/\/}
    zle backward-word
}
zle -N backward-word-dir
bindkey "^[[1;3D" backward-word-dir

# Alt+Right
forward-word-dir () {
    local WORDCHARS=${WORDCHARS/\/}
    zle forward-word
}
zle -N forward-word-dir
bindkey "^[[1;3C" forward-word-dir
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.