我想删除源文件中带引号的字符串
无需标记字符串的开头和终止区域,
但只需将点放置在引用字符串内的任意位置并按快捷键即可。
我尝试在 elisp 中为此编写一个函数,但我发现该文件
需要从头到点进行解析,以确定该点是否在带引号的字符串内,并找到带引号的字符串的边界(还处理 \")...
但该文件已经被 font-lock 解析。
所以现在我可以知道我是否在带引号的字符串内:
(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)
欢迎提出任何改进建议。
您可以使用底层解析器的数据,而不是依赖字体锁定。围绕点(如果有)的字符串的开头可用作(nth 8 (syntax-ppss))
。然后您可以使用(forward-sexp 1)
跳过绳子找到它的末端。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)