Mengapa saya tidak dapat mengikat Shift- <backspace>?


8

Sistem saya adalah debian wheezy, saya mencoba melakukan hal berikut

(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)

Yang saya inginkan adalah dalam mode insert jahat, saya dapat menghapus satu lebar tab ke depan alih-alih menekan backspace 4 kali. Pengikat tombol berfungsi di laptop saya, tetapi tidak berfungsi di desktop saya. Saya memeriksa ikatan untuk evil-shift-left-line, itu telah berubah tetapi tidak berhasil, dan membantu "shift-backspace" hanya menunjukkan "backspace". Namun, shift do memiliki efek pada "backspace", "shift-backspace" menghapus kata sebelumnya, bukan karakter.

Ketika saya memasukkan "shift-backspace" setelah "Cq", ia memiliki notasi yang sama "^?" sebagai "backspace" di desktop saya, sedangkan di laptop saya yang pertama adalah "^ @".

Ada ide mengapa itu tidak bekerja di desktop saya? Terima kasih untuk bantuannya!

Pertanyaan ini mungkin terkait dengan yang ini: Shift + Up tidak dikenali oleh Emacs di terminal


2
Apakah Anda menggunakan Emacs di terminal?
Malabarba

Tidak, saya menggunakan emacs yang berdiri sendiri.
godblessfq

Jawaban:


6

Menariknya, Anda dapat mencoba mengikat deletechar kunci pseudo .

Ketika saya memeriksa ikatan backspacepada mesin saya dengan C-h k [backspace], saya mendapatkan:

DEL(Diterjemahkan dari <backspace>) menjalankan perintah ... (bla bla bla)

Ketika saya memeriksa ikatan shift+ backspacepada mesin saya dengan C-h k S-[backspace], saya mendapatkan:

<deletechar>(Diterjemahkan dari <delete>) menjalankan perintah ... (bla bla bla)

Karenanya berikut ini bekerja pada mesin saya:

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

Di komputer saya, ketika saya memeriksa pengikatan tombol shift + <backspace> adalah <backspace>.
godblessfq

2

Saya memiliki ini di pengaturan saya:

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

untuk membuat shift + backspace / shift + delete membunuh semua spasi putih.


Dan kalau-kalau seseorang membutuhkan fungsi-fungsi ini, ini dia:

(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

Saya sekarang senang dengan pengaturan ini.

(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)))
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.