킬 링을 추가하지 않고 백 스페이스


12

Crtl + Backspace 또는 Ctrl + Del을 사용하면 삭제 된 텍스트가 킬 링에 추가됩니다.
이 문제가 발생하지 않도록하려면 어떻게해야합니까? 킬 링으로 삭제 될 때 모든 텍스트 조각을 킬 링으로 보낼 필요는 없습니다.

부가 질문 : 어쨌든이 기본 설정의 목적은 무엇입니까? :)


부수적 인 질문에 대해 : 아마 당신이 겪지 않고 삭제 한 것의 백업 사본을 가지고 있어야합니다 undo. 그러나 야생 추측.
Manuel Uberti

답변:


7

설명서에 따르면 :

<C-delete>에서 대화 형으로 컴파일 된 Lisp 함수 인 kill-word (글로벌 맵에 있음) 명령을 실행합니다 ‘simple.el’.

에 바인딩되어 <C-delete>, M-d있습니다.

(킬-워드 ARG)

단어가 끝날 때까지 문자를 앞으로 죽입니다. 인수 ARG를 사용하여 여러 번 수행하십시오.

이제 소스 코드를 찾아 보자.

(defun kill-word (arg)                                                                                                     
  "Kill characters forward until encountering the end of a word.                                                           
With argument ARG, do this that many times."
  (interactive "p")
  (kill-region (point) (progn (forward-word arg) (point))))

그런 다음 kill-region함수 의 설명서에서 다음 을 찾습니다.

포인트와 마크 사이의 텍스트를 죽입니다 ( "잘라 내기").
This deletes the text from the buffer and saves it in the kill ring. [yank] 명령은 거기서부터 검색 할 수 있습니다. (지역을 죽이지 않고 저장하려면 [kill-ring-save]를 사용하십시오.)

[...]

Lisp 프로그램은 텍스트를 죽이기 위해이 기능을 사용해야합니다. (텍스트를 삭제하려면를 사용하십시오 delete-region.)

이제 더 나아가고 싶다면 킬 링에 복사하지 않고 삭제할 때 사용할 수있는 기능입니다.

(defun my-delete-word (arg)
  "Delete characters forward until encountering the end of a word.
With argument, do this that many times.
This command does not push text to `kill-ring'."
  (interactive "p")
  (delete-region
   (point)
   (progn
     (forward-word arg)
     (point))))

(defun my-backward-delete-word (arg)
  "Delete characters backward until encountering the beginning of a word.
With argument, do this that many times.
This command does not push text to `kill-ring'."
  (interactive "p")
  (my-delete-word (- arg)))

(defun my-delete-line ()
  "Delete text from current position to end of line char.
This command does not push text to `kill-ring'."
  (interactive)
  (delete-region
   (point)
   (progn (end-of-line 1) (point)))
  (delete-char 1))

(defun my-delete-line-backward ()
  "Delete text between the beginning of the line to the cursor position.
This command does not push text to `kill-ring'."
  (interactive)
  (let (p1 p2)
    (setq p1 (point))
    (beginning-of-line 1)
    (setq p2 (point))
    (delete-region p1 p2)))

; bind them to emacs's default shortcut keys:
(global-set-key (kbd "C-S-k") 'my-delete-line-backward) ; Ctrl+Shift+k
(global-set-key (kbd "C-k") 'my-delete-line)
(global-set-key (kbd "M-d") 'my-delete-word)
(global-set-key (kbd "<M-backspace>") 'my-backward-delete-word)

Ergo의 의례


고마워요. 부수적 인 질문은 어떻습니까? : p
Daniel Hitzel

3
@DanielHitzel 죄송합니다. 사이드 질문에 대한 답변이 없습니다 :)
Nsukami _

그래서 나는 혼자가 아닙니다 : D
Daniel Hitzel 16:14의

4

Emacs 24는 구성이 없으므로 킬 링에 추가하지 않고 텍스트를 선택한 다음 Backspace또는 을 눌러 텍스트를 삭제할 수 있습니다 Delete. 마크가 활성화되면이 키들은 커서 앞 / 뒤의 문자를 삭제하는 대신 영역을 삭제합니다.

즉, 삭제하려는 텍스트의 한쪽 끝으로 이동하고 Ctrl+를 누르고 Space다른 쪽 끝으로 이동 한 다음 Backspace(또는 Delete)을 눌러 강조 표시된 영역을 삭제하십시오. 또는 한쪽 끝으로 이동하고 Shift이동 키를 사용하여 다른 쪽 끝으로 이동 한 상태에서을 누릅니다 Backspace.


MacOS에서 Emacs 25.1을 사용하는 경우에는 그렇지 않습니다.
NVaughan

0

나는 같은 문제를 겪었고이 방법으로 더 쉽게 해결했다.

(global-set-key (kbd "<backspace>")
          '(lambda () (interactive) (backward-delete-char-untabify 1 nil)))

호출하면 (backward-delete-char-untabify 1 nil)Emacs가 하나의 문자 (이것은 1매개 변수 임) 를 역으로 삭제 하고 링에서 복사하는 것 (매개 변수) 으로 돌아 가지 않도록 지시 nil합니다. 매개 변수가있는 함수를 키에 바인딩하기 때문에 람다 (즉 익명) 함수가 필요합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.