Tại sao tôi không thể liên kết Shift- <backspace>?


8

Hệ thống của tôi là debian wheezy, tôi đã cố gắng làm như sau

(global-set-key (kbd "S-<backspace>") 'evil-shift-left-line)
(global-set-key (kbd "<S-backspace>") 'evil-shift-left-line)
(define-key global-map [S-backspace] 'evil-shift-left-line)

Những gì tôi muốn là trong chế độ chèn ác, tôi có thể xóa một chiều rộng tab về phía trước thay vì nhấn backspace 4 lần. Phím bấm hoạt động trên máy tính xách tay của tôi, nhưng không hoạt động trên máy tính để bàn của tôi. Tôi kiểm tra ràng buộc cho evil-shift-left-line, nó đã thay đổi nhưng không hoạt động và trợ giúp về "shift-backspace" chỉ hiển thị "backspace". Tuy nhiên, shift do có tác dụng đối với "backspace", "shift-backspace" xóa từ trước đó thay vì ký tự.

Khi tôi chèn "shift-backspace" sau "Cq", nó có cùng ký hiệu "^?" là "backspace" trên máy tính để bàn của tôi, trong khi trên máy tính xách tay của tôi trước đây là "^ @".

Bất cứ ý tưởng về lý do tại sao nó không hoạt động trên máy tính để bàn của tôi? Cảm ơn sự giúp đỡ của bạn!

Câu hỏi này có thể liên quan đến câu hỏi này: Shift + Up không được Emacs nhận ra trong một thiết bị đầu cuối


2
Bạn đang sử dụng Emacs trên thiết bị đầu cuối?
Malabarba

Không, tôi đang sử dụng emacs độc lập.
godblessfq

Câu trả lời:


6

Thật thú vị, bạn có thể thử ràng buộc deletechar khóa giả .

Khi tôi kiểm tra ràng buộc backspacetrên máy của mình C-h k [backspace], tôi nhận được:

DEL(dịch từ <backspace>) chạy lệnh ... (blah blah blah)

Khi tôi kiểm tra ràng buộc shift+ backspacetrên máy của mình C-h k S-[backspace], tôi nhận được:

<deletechar>(dịch từ <delete>) chạy lệnh ... (blah blah blah)

Do đó, hoạt động sau đây trên máy của tôi:

(global-set-key [deletechar] #'evil-shift-left-line)

Trên máy tính của tôi, khi tôi kiểm tra ràng buộc của phím shift + <backspace> là <backspace>.
godblessfq

2

Tôi có điều này trong thiết lập của tôi:

(define-key global-map [(shift backspace)] 'backward-delete-whitespace)
(define-key global-map [(shift delete)] 'forward-delete-whitespace)

để thực hiện shift + backspace / shift + xóa kill tất cả các khoảng trắng.


Và chỉ trong trường hợp ai đó sẽ cần các chức năng này, thì đây là:

(defun backward-delete-whitespace ()
  (interactive)
  (let ((p (point)))
    (re-search-backward "[^ \t\n]+" nil t)
    (forward-char)
    (delete-region p (point))))

(defun forward-delete-whitespace ()
  (interactive)
  (re-search-forward "[ \t\n]+" nil t)
  (replace-match "" nil nil))

1

Bây giờ tôi hạnh phúc với thiết lập này.

(defun my/backspace()
  (interactive)
  (if (string-match "[^[:space:]]+"
                    (buffer-substring-no-properties
     (line-beginning-position) (point))) ;; return nil no match
      (backward-kill-word 1)(evil-shift-left-line)))
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.