我想在源文件中终止带引号的字符串,而不必标记字符串的开头和终止区域,而只需将点放在带引号的字符串内的任何位置并按下快捷方式即可。
我试图为此在elisp中编写一个函数,但我发现需要从头到尾解析文件以确定该点是否在引用字符串内,并找到引用字符串的边界(也处理 \")...
但是该文件已经被字体锁解析了。所以现在我可以确定我是否在引号内:
(defun inside-quoted-string? ()
(interactive)
(print (find 'font-lock-doc-face (text-properties-at (point)))))
但是我如何获得字符串的边界?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)
欢迎任何改进它的建议。