내가 일반적으로 사용하는 것은 다음과 같습니다. 어떻게 든 복사 대신 균형 표현을 죽이려는 나를 위해 유용합니다. 대신 복사본을 원한다면 먼저 죽이고 실행 취소하십시오. 시점 즉 ()
, []
, {}
, <>
이든이 신택스에 의해 정의되는 내부 문자열 그렇지 평형 식이면
이 기능은, 캐릭터를 죽인다.
(defun kill-at-point()
"Kill the quoted string or the list that includes the point"
(interactive)
(let ((p (nth 8 (syntax-ppss))))
(cond
;; string
((eq (char-after p) ?\")
(goto-char p)
(kill-sexp))
;; list
((ignore-errors (when (eq (char-after) ?\()
(forward-char))
(up-list)
t)
(let ((beg (point)))
(backward-list)
(kill-region beg (point)))))))
나는 또한 포인트가 주석 내부 경우에 대한 특별한 경우를 추가하려고했지만, 나는 점에 의견의 경계를 결정하는 일반적인 방법을 찾을 수 없습니다. 아무도 모른다면, 말해주십시오.
이 다른 기능도 관련 될 수 있습니다. 이전과 마찬가지로 살인에 대해서는 으로 표시됩니다. 좋은 점은 라고 불릴 때마다 지역을 확장한다는 것입니다. 첫 번째 것은 C-, 및 두 번째 to C-M-,에 바인딩합니다.
(defun mark-at-point()
"Mark the quoted string or the list that includes the point"
(interactive)
(let ((p (nth 8 (syntax-ppss))))
(if (eq (char-after p) ?\")
(progn
(goto-char p)
(set-mark (point))
(forward-sexp))
(progn
(when (eq (char-after) 40)
(forward-char))
(condition-case nil
(progn
(up-list)
(set-mark (point))
(let ((beg (point)))
(backward-list)
(exchange-point-and-mark)))
(error
(when (looking-back "}")
(exchange-point-and-mark)
;; assumes functions are separated by one empty line
(re-search-backward "^[^A-Z-a-z]" nil t)
(forward-char))))))))
이것은 정말 좋아 보인다. kill-ring-save는'(kill-ring-save BEG END)'형식을 기대합니다. 따라서 나는 i) 그것을 사용하거나 ii) sexp-at-point *** 결과를 kill-ring에 저장할 수있는 다른 기능을 사용해야합니다. 어떤 통찰력? – Nutritioustim
그래서'BEG'와'END'를 얻기 위해'(BEG.END)'를 리턴하면'car'와' cdr'을'kill-ring-save'으로 바꾸십시오. – Drew
이 방법을 시도하면 emacs가'잘못된 형식 인수 : symbolp, (one (two)) '오류를 표시합니다. 내 코드는 *** [online here] (https://www.refheap.com/18032) ***입니다. 나는 Emacs Lisp 초보자라고 언급해야한다. 그래서 나는 아주 명확한 설명이 필요합니다. 해당 코드 블록을 자유롭게 편집하거나 가장 쉬운 작업을 수행하십시오. 감사. – Nutritioustim