我无法想出一种方法在不移动光标的情况下测试语法条件——例如,skip-syntax-forward
和skip-chars-forward
都移动光标以返回t
或正值。如何在不移动光标的情况下返回t
或nil
?
(defun lawlist-kill-word ()
"Mark word / symbol + whitespace to the right of the cursor, and kill same."
(interactive)
(let* (
(symbol-regexp "\s.\|\s_")
(word-regexp "\sw"))
(modify-syntax-entry ?' "_") ;; apostrophe = symbol constituent
(cond
((< 0 (skip-syntax-forward "_."))
(let ((end (point)))
(set-mark end)
(while (looking-back symbol-regexp)
(backward-char))
(let ((beg (point)))
(delete-region beg end)
(setq beg (point))
(cond
((skip-chars-forward " t")
(setq end (point))
(set-mark end)
(delete-region beg end))))))
((< 0 (skip-syntax-forward "w"))
(let ((end (point)))
(set-mark end)
(while (looking-back word-regexp)
(backward-char))
(let ((beg (point)))
(delete-region beg end)
(setq beg (point))
(cond
((skip-chars-forward " t")
(setq end (point))
(set-mark end)
(delete-region beg end))))))
(t
(let ((beg (point)))
(set-mark beg)
(skip-chars-forward " t")
(let ((end (point)))
(delete-region beg end)))
(deactivate-mark)))
(modify-syntax-entry ?' "w") )) ;; apostrophe = word constituent
EDIT:lawlist-kill-word
正在进行中--对该函数的任何更新都将发布到与该问题相关的线程--即:Emacs:删除空白或单词
正如@Tobias所说:在save-excursion
中包装光标移动。将所需的任何值(例如(point)
)保存在变量中,并根据需要返回。
例如,如果你想把位置放在前面四行,可以这样做:
(let ((posn (save-excursion (forward-line 4) (point))))
posn)