Emacs : 킬 링없이 텍스트를 삭제하는 방법?
텍스트 대신 다른 텍스트 를 잡아 당길 수있는 일부 텍스트를 삭제하고 싶습니다 . 어떻게 할 수 있습니까? Cw는 선택한 텍스트를 잘라내어 링을 죽이고 내가 잡아 당기고 싶은 텍스트없이 끝납니다.
또한 버튼을 누르지 바로 텍스트 대신 텍스트를 직접 잡아 당기는 것이 좋습니다?
M-x delete-region
자주 입력 하지만 키에 바인딩 할 수 있습니다.
최신 버전의 Emacs에서 선택 모드 삭제를 사용하면 명령을 입력 할 필요가 없습니다.
기본적으로 텍스트 삽입은 마크가 활성 상태 인 경우에도 발생합니다. 예를 들어 a를 입력하면 문자 'a'가 삽입 된 다음 마크가됩니다. 보조 모드 인 삭제 선택 모드는 동작을 수정합니다. 해당 모드를 활성화 한 다음 마크가 활성화 된 상태에서 텍스트를 삽입하면 영역의 텍스트가 먼저 삭제됩니다. 또한 일반적으로 같은 단지 하나의 문자를 삭제하는 것이 명령 C-d또는 DEL대신 전체 영역을 삭제합니다. 선택 삭제 모드를 켜거나 끄려면 다음을 입력합니다.
M-x delete-selection-mode.
M-y
after C-y
를 사용 하여 킬 링에서 이전 항목을 삽입하거나 browse-kill-ring 패키지를 사용할 수 있습니다 .
두 번째 질문에 관한 DeleteSelectionMode를 참조하십시오 .
나는 같은 문제가 있었다. 내가 지금까지 얻은 가장 가까운 것입니다.
(defun ruthlessly-kill-line ()
"Deletes a line, but does not put it in the kill-ring. (kinda)"
(interactive)
(move-beginning-of-line 1)
(kill-line 1)
(setq kill-ring (cdr kill-ring)))
‘kill-line’
(‘C-k’
) 와 동일 하지만 킬링 부작용이 없습니다.(delete-region (point) (line-end-position))
Mx eval-expression (setq kill-ring (cdr kill-ring))-kill-ring에서 마지막 항목을 제거합니다.
두 번째 질문에는 DeleteSelectionMode 대신 C-Return에 의해 활성화 된 멋진 사각형 선택 모드를 추가로 제공하는 CUA 모드 를 활성화 할 수 있습니다 . CUA 모드는 22.1 이후 emacs의 일부입니다.
이것에 대한 답을 찾았습니다.
여기에 먼저 게시했습니다 .
;; Ctrl-K with no kill
(defun delete-line-no-kill ()
(interactive)
(delete-region
(point)
(save-excursion (move-end-of-line 1) (point)))
(delete-char 1)
)
(global-set-key (kbd "C-k") 'delete-line-no-kill)
기술적으로 다른 답변은 첫 번째 부분에서 잘못되었습니다.
내 구현 및 동기는 다음과 가변적입니다.
(defun delete-word (arg)
"Delete characters backward until encountering the beginning of a word.
With argument ARG, do this that many times."
(interactive "p")
(delete-region (point) (progn (backward-word arg) (point))))
에서 " kill-word
"에서 코드를 수정 했습니다 simple.el
. kill-region
으로 delete-region
및 로 전환 forward-word
했습니다 backward-word
. 이렇게하면 kill-ring
emacs 외부에서 kill-ring
영향을받은 다른 상황과 달리에 실제로 영향을주지 않습니다 .
(defun copy-to-register-z (p1 p2)
"Copy text selection to register named “z”."
(interactive "r")
(copy-to-register ?z p1 p2))
(defun replace-register-content-z (p1 p2)
"Replace register named “z”'s content."
(interactive "r")
(delete-region p1 p2)
(insert-register ?z))
(global-set-key (kbd "C-c c") 'copy-to-register-z)
(global-set-key (kbd "C-c v") 'replace-register-content-z)
다음과 같이 kill-region 및 kill-line 키 Cw 및 Ck에 해당하는 삭제를 추가합니다. 키 Cv 및 Cz에 바인딩됩니다.
;; delete-region에 대한 키 바인딩은 "Windows CUT Ctrl-x에 해당"합니다. ;; 사용할 키 바인딩은 선택하기가 어색합니다. ;; Cv "Windows PASTE Ctrl-v"를 사용하는 것은 상당히 상당히 파괴적인 옵션입니다. ;; Cv = 내가 사용하지 않는 emacs에서 위로 스크롤합니다. (global-set-key (kbd "Cv") 'delete-region)) ;; Ck (kill-line) 대신 "Windows CUT"를 사용하여 다음을 수행 할 수 있습니다. (defun delete-line () "줄 삭제, 킬 링에서 빼내십시오.이 func를 Cz에 바인딩" (인터렉티브) (setq 마지막 명령 '줄 삭제) (킬라 인) (setq 킬링 (cdr 킬링)) (setq kill-ring-yank-pointer kill-ring) (setq 마지막 명령 '줄 삭제) ) (글로벌 세트 키 (kbd "Cz") '삭제 라인) ;; 마지막 명령을 설정하지 않고 2+ C-zs 엉망진창 킬링
첫 번째 질문에 대한 나의 대답 : emacs에서 텍스트를 표시 (마우스 대신 또는 세트 표시 사용 C-SPC
)하고 키보드에서 "<-백 스페이스"버튼을 사용 C-w
합니다. 이런 식으로 시스템 클립 보드의 텍스트 위에 넣을 수 있습니다.C-w
이 답변의 배경 : 때때로 emacs에서 영역을 대체하는 데 사용하려는 emacs 외부 텍스트를 받았을 때, 해당 텍스트를 먼저 시스템 클립 보드 (예 : Windows Ctrl + C
) 에 복사 한 다음 C-w
in emacs에서 " 나중에 M-w
클립 보드에있는 내 텍스트를 킬링에서 복구 할 수 있기를 바라면서 교체하려는 텍스트 영역을 삭제하십시오 . 불행히도 클립 보드는에 의해 죽인 텍스트에 의해 무시되고 C-w
클립 보드의 원본 메시지는 절대로 킬링에 표시되지 않습니다.
두 번째 질문의 경우 항상 emacs에서 텍스트를 먼저 표시 한 다음 직접 표시 할 수 있습니다. C-y
대부분의 kill 함수는 kill-region
텍스트를 죽이는 실제 작업을 수행하는 데 사용 됩니다. lisp 매크로를 사용하여 kill 함수에서 삭제 함수를 만듭니다.
(defmacro jpk/delete-instead-of-kill (&rest body)
"Replaces `kill-region' with `delete-region' in BODY."
`(cl-letf (((symbol-function 'kill-region)
(lambda (beg end &optional yank-handler)
(delete-region beg end))))
,@body))
(defun jpk/delete-word (arg)
"Like `kill-word', but does not save to the `kill-ring'."
(interactive "*p")
(jpk/delete-instead-of-kill (kill-word arg)))
여기 kill-region
에 킬링에 값을 강제하지 않는 버전이 있습니다.
(defun kill-or-delete-region (beg end prefix)
"Delete the region, storing it in the kill-ring.
If a prefix argument is given, don't change the kill-ring."
(interactive "r\nP")
(if prefix
(delete-region beg end)
(kill-region beg end)))
(global-set-key (kbd "C-w") 'kill-or-delete-region)
이를 통해 C-w
이전과 같이 할 수 있지만 C-u C-w
이제는 킬링을 변경하지 않고 텍스트를 삭제합니다.
킬 링없이 텍스트를 삭제하는 방법?
이 delete-region
기능은 킬 링에 추가하지 않고 선택한 영역을 삭제합니다.
또한 버튼을 누르지 않고도 텍스트 대신 텍스트를 직접 잡아 당기는 것이 가능합니까?
선택한 영역의 텍스트를 이미 킬 링에 넣은 텍스트로 바꾸는 방법을 묻는 것 같습니다.
설정 (delete-selection-mode 1)
을 통해 선택한 영역 위에 홱 잡아 당기거나 붙여 넣을 수 있습니다. 또한 선택한 영역을 입력하고 바꿀 수도 있습니다.
OS XI의 버전 25.1.1 (setq select-enable-primary nil)
에서는 선택한 영역을 킬 링에 복사하지 못하도록 추가 해야했습니다.
참고 URL : https://stackoverflow.com/questions/637351/emacs-how-to-delete-text-without-kill-ring
'ProgramingTip' 카테고리의 다른 글
Hibernate Query.list ()를 List로 캐스팅하는“적절한”방법은 무엇입니까? (0) | 2020.10.12 |
---|---|
특정 파일 형식을 제외하고 특정 폴더 아래의 모든 파일을 재귀 무시합니다. (0) | 2020.10.12 |
Rails 3.1에서 새 자산 경로 추가 (0) | 2020.10.12 |
목록의 표현을 실제 목록으로 변환 (0) | 2020.10.12 |
Razor보기에서 인코딩되지 않은 암호화 된 내보내기 (0) | 2020.10.12 |