如何在emacs中杀死一个带引号的字符串?

abo*_*abo 7 emacs elisp

我想在源文件中删除带引号的字符串,而不必标记字符串和kill-region的开头,只需将点放在带引号的字符串中的任意位置并按下快捷键即可.

我尝试在elisp中编写一个函数,但我发现该文件需要从头开始解析,以确定该点是否在引用的字符串内,并找到引用字符串的边界(同样处理\")...

但该文件已被font-lock解析.所以现在我可以知道我是否在引用的字符串中:

(defun inside-quoted-string? ()
  (interactive)
  (print (find 'font-lock-doc-face (text-properties-at (point)))))
Run Code Online (Sandbox Code Playgroud)

但是我如何获得字符串的边界?font-lock知道它,因为它很好地用蓝色突出显示它,但我怎么得到它?

编辑:谢谢你的回答.我想出了这个完全符合我想要的代码 - 在不选择区域的情况下移动代码,甚至移动到代码的开头.

(defun kill-at-point ()
  "Kill 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)
      (kill-sexp))
      (progn
    (up-list)
    (let ((beg (point)))
      (backward-list)
      (kill-region beg (point)))))))
(global-set-key (kbd "C-,") 'kill-at-point)
Run Code Online (Sandbox Code Playgroud)

欢迎提出任何改进建议.

Ste*_*fan 5

您可以使用底层解析器的数据,而不是依赖font-lock.点(如果有)的字符串开头可用(nth 8 (syntax-ppss)).然后,您可以使用(forward-sexp 1)跳过字符串来查找其结尾.