求个功能,标记当前光标下的变量(下划线和减号也一起被标记的) 现在有个mark-word的到下划线就停止了
看了下源码,用的forward-word去标记的,完事这函数还是个c写的,,不知道怎么改一个我需要的出来。。
看了下源码,用的forward-word去标记的,完事这函数还是个c写的,,不知道怎么改一个我需要的出来。。
能举个例子嘛?
光标在这里,我想要的函数 能执行一次选中prog-mode-hook 目前看比较相似的功能是mark-word 但是只会往后选中 而且执行一次命令选中mode,第二次才选中hook
ps: 因为我js经常需要选中当前的函数名,然后C-s查找函数的定义位置跳过去,所以用的十分频繁
有一个插件叫:expand-region,可以根据光标的位置逐步拓展选中的区域。第一次选中 mode
,第二次选中 prog-mode-hook
。
开启 superword-mode
,再执行 mark-word
就能跨越连字符了。
er/mark-symbol 可以直接选中整个变量了
这个比较烦的是不能向前选中,只能往后追加
(defun mark-whole-word ()
(interactive)
(let (restore-p)
(unwind-protect
(progn
(when (not superword-mode)
(setq restore-p t))
(superword-mode 1)
;; 如果手动开启 superword,保留 let 部分就可以了
(let ((bounds (bounds-of-thing-at-point 'word)))
(goto-char (car bounds))
(set-mark (cdr bounds))))
(when restore-p
(superword-mode -1)))))
感谢你的回复。 我尝试了你的函数,有几个问题
.
停止选中,(针对现在的这个变量aa_bb_cc来说)symbol's value as variable is void: superword-mode
我需要M-x执行一次superword-mode(不报错)之后,再执行这个函数不报错(似乎是因为 when not的判断绕过去了)顺便问一下,刚刚我的另一块代码 ,因为也有这样的错误symbol's function definition is void: yas-reload-all
,请你帮忙看下
;; 这块代码是在init.el 中,启动emacs的时候报错的
(use-package yasnippet
:ensure t
:defer t
:init
(yas-reload-all) ;;symbol's function definition is void: yas-reload-all
(defun my-yasnippet-init()
(push 'company-yasnippet company-backends)
(yas-minor-mode-on))
(add-hook 'prog-mode-hook 'my-yasnippet-init))
superword-mode yas-reload-all
这两个都是我写在代码里面报错了,但是M-x执行没问题,很疑惑
bounds-of-thing-at-point
我想不到有这样的函数,想问下有哪里 可以查看这些内置函数列表介绍(最好是中文,英文也可以)顺便贴一下楼上插件的er/mark-symbol的代码
(defun er/mark-symbol ()
"Mark the entire symbol around or in front of point."
(interactive)
(let ((symbol-regexp "\\s_\\|\\sw"))
(when (or (looking-at symbol-regexp)
(er/looking-back-on-line symbol-regexp))
(skip-syntax-forward "_w")
(set-mark (point))
(skip-syntax-backward "_w"))))
的确 er/mark-symbol
更符合需求。
superword-mode
和 subword-mode
在同一个文件里,用之前必须 (require 'subword)
,类似问题同样处理。我不太熟悉 use-package
,似乎记得 :init
是在 requie
之前,所以不应该在其中执行 yas 函数,应该放到 :config
里边。
瞎了瞎了。翻出来书签里面一个网站 http://ergoemacs.org/emacs/elisp_examples.html ,教程里面就是这个例子。
;;Select Current Word
;;This code shows you how to set a mark (select text) programmatically.
;; turn on highlight selection
(transient-mark-mode 1)
(defun select-current-word ()
"Select the word under cursor.
“word” here is considered any alphanumeric sequence with “_” or “-”."
(interactive)
(let (pt)
(skip-chars-backward "-_A-Za-z0-9")
(setq pt (point))
(skip-chars-forward "-_A-Za-z0-9")
(set-mark pt)))