2009-08-31 36 views
8

Tôi muốn thay đổi dấu phân cách bash (hoặc readline) sử dụng để tách các từ. Cụ thể là tôi muốn làm cho '-' không phân định từ, do đó nếu tôi có văn bảnThay đổi các dấu phân cách từ trong bash

ls some-file 

và tôi nhấn Alt-Backspace nó sẽ xoá toàn bộ some-file văn bản và không chỉ đến '-' char. Điều này cũng sẽ khiến việc xóa các cờ dài như --group-directories-first nhanh hơn và dễ dàng hơn, chỉ cần một lần nhấn phím.

Tôi tin rằng đây là cách hoạt động của zsh và tôi muốn làm cho hành vi bash hoạt động theo cách tương tự.

+0

Ký tự '-' có ý nghĩa đặc biệt trong dòng lệnh, do đó hành vi mặc định không đáng ngạc nhiên. Nếu bạn có thể thay đổi nó, liệu có phản ứng phụ nào không? Giả sử bạn đã gõ 'ls -al some-file', bạn có muốn xóa mọi thứ không? – pavium

+0

@pavium trong trường hợp đó, tôi muốn 'một số tập tin' bị xóa lúc đầu, và khi nhấn lần thứ hai tôi muốn' -al' bị xóa. – spatz

+1

Tôi chỉ tìm thấy [câu trả lời] (http://superuser.com/questions/547130/bash-readline-for-move-forward-by-whitespace-delimited-word) trên superuser.com. – Ekans

Trả lời

7

ctrl-w thực hiện chính xác những gì bạn muốn.

+0

Tôi đọc phần đó của sách hướng dẫn một tỷ lần, tôi không thể tin rằng mình đã bỏ lỡ nó. Cảm ơn :) – spatz

+3

Tôi sẽ chỉ lưu ý rằng sau khi thử nghiệm với nó một chút nó vẫn không tối ưu kể từ khi slashes được bỏ qua như tách, đó là gây phiền nhiễu khi làm việc với đường dẫn. Tôi đã thêm dòng '" \ ew ": unix-filename-rubout' vào'/etc/inputrc' và bây giờ M-e xóa một từ trong khi bỏ qua dấu gạch ngang nhưng không xử lý dấu gạch chéo làm dấu tách. – spatz

3

Một điều cần ghi nhớ là ánh xạ khóa bash cho ctrl-W sẽ không hoạt động nếu bạn có cài đặt ma trận stty được gán cho ctrl-W. Nếu bạn chạy "stty -a" và bạn thấy "werase =^W" sẽ được ưu tiên và sử dụng ý tưởng tty về ranh giới của từ là gì. Ý tưởng của tty về một ranh giới từ thường là khoảng trống, trong khi hàm băm phía sau của bash cũng bao gồm - và /.

Nếu bạn muốn đặt Alt-Backspace làm điều tương tự như cài đặt ma sát, bạn có thể thực hiện việc này: liên kết '"\ M- \ Ch": unix-word-rubout' liên kết '"\ M- \ C-? ": Unix-word-rubout '

Ngoài ra, nếu bạn thực sự muốn làm ctrl-W làm những gì Alt-Backspace, bạn sẽ làm: stty werase undef # trừ khi bạn làm điều này, bash bỏ qua lệnh bind theo sau bind '"\ Cw": backwards-kill-word'

+1

Không liên quan đến OP, nhưng 'stty werase undef' hoàn toàn cố định vấn đề của tôi! Cảm ơn! –

1

Điều này có thể hữu ích: Ctrl-r sẽ bắt đầu đảo ngược tìm kiếm (cho lịch sử VÀ dòng hiện tại), để bạn có thể chỉ cần nhấn không gian và thoát và nó trở lại whe lại bạn muốn nó, hoặc ctrl-r một lần nữa (sau khi nhấn không gian đầu tiên) nếu bạn muốn quay trở lại một arg nữa. Sau đó, bạn có thể tùy chọn giết phần còn lại của dòng.

Đặc biệt hữu ích nếu bạn đang xử lý các đối số đường dẫn dài (ví dụ: trong cp hoặc diff) và cần sửa đổi kết thúc của arg đầu tiên.

Đã cố gắng để \ M-b thực hiện việc này, nhưng nó dừng lại ở dấu gạch chéo.

Các vấn đề liên quan