Emacs 搜索精确词
Emacs Search exact word
我大部分时间都在使用verilog,我最喜欢的编辑器是emacs。
vi (vim) 中有一个我喜欢但不知道在 emacs 中如何实现的功能
我想进行精确的单词搜索,例如 - 假设我有这段文字:
1. wire axi_bvalid = bvalid;
2. wire axi_bready; // assigned later
3. assign axi_cross_fifo_pop = axi_bvalid & axi_bready
4. wire axi = 1'b1;
在搜索 axi
时,我想仅在第 4 行获得匹配项。
今天 Ctrl-S 搜索将匹配 axi
.
的每个实例
在 vim 中,方法是在单词或 /\ 上按 *。
emacs 中有类似的东西吗?
谢谢分配,Jony
我认为您正在搜索 Word Search 功能,使用 M-s w
激活。
您可以通过两种方式使用它:只需发出 M-s w
,然后键入要搜索的词。
或者要在 vim 中获得类似于 *
的内容,您可以使用 isearch 开始搜索,使用 C-s C-w
(搜索光标下的单词),然后使用 M-s w
切换搜索到全词模式。
我没有在 Emacs 中找到等效于 vim 的 * 的内置函数,但我确实设法编写了这两个命令可能适合你:
(defun my-isearch-forward-word-at-point ()
"Search for word at point."
(interactive)
(let ((word (thing-at-point 'word t))
(bounds (bounds-of-thing-at-point 'word)))
(if word
(progn
(isearch-mode t nil nil nil t)
(when (< (car bounds) (point))
(goto-char (car bounds)))
(isearch-yank-string word))
(user-error "No word at point"))))
(defun my-isearch-forward-symbol-at-point ()
"Search for symbol at point."
(interactive)
(let ((symbol (thing-at-point 'symbol t))
(bounds (bounds-of-thing-at-point 'symbol)))
(if symbol
(progn
(isearch-mode t nil nil nil 'isearch-symbol-regexp)
(when (< (car bounds) (point))
(goto-char (car bounds)))
(isearch-yank-string symbol))
(user-error "No symbol at point"))))
(global-set-key (kbd "M-s ,") 'my-isearch-forward-word-at-point)
(global-set-key (kbd "M-s .") 'my-isearch-forward-symbol-at-point)
如您所见,我将这些命令绑定到 M-s 、 和 M-s .。
根据您的 Emacs 版本,您可以使用内置命令 isearch-forward-symbol-at-point
(默认绑定到 M-s .)。
需要基于正则表达式的搜索,例如
M-x isearch-forward-regexp
RET \_<axi\_>
RET
查看 Emacs Lisp 信息文件,
节点 34.3.1.3:正则表达式中的反斜杠构造
运行 作为命令:
(defun my-re-search-forward (&optional word)
"Searches for the last copied solitary WORD, unless WORD is given. "
(interactive)
(let ((word (or word (car kill-ring))))
(re-search-forward (concat "\_<" word "\_>") nil t 1)
(set-mark (point))
(goto-char (match-beginning 0))
(exchange-point-and-mark)))
绑定到C-c : 例如:
(global-set-key [(control c) (\:)] 'my-re-search-forward)
我大部分时间都在使用verilog,我最喜欢的编辑器是emacs。
vi (vim) 中有一个我喜欢但不知道在 emacs 中如何实现的功能
我想进行精确的单词搜索,例如 - 假设我有这段文字:
1. wire axi_bvalid = bvalid;
2. wire axi_bready; // assigned later
3. assign axi_cross_fifo_pop = axi_bvalid & axi_bready
4. wire axi = 1'b1;
在搜索 axi
时,我想仅在第 4 行获得匹配项。
今天 Ctrl-S 搜索将匹配 axi
.
在 vim 中,方法是在单词或 /\ 上按 *。
emacs 中有类似的东西吗?
谢谢分配,Jony
我认为您正在搜索 Word Search 功能,使用 M-s w
激活。
您可以通过两种方式使用它:只需发出 M-s w
,然后键入要搜索的词。
或者要在 vim 中获得类似于 *
的内容,您可以使用 isearch 开始搜索,使用 C-s C-w
(搜索光标下的单词),然后使用 M-s w
切换搜索到全词模式。
我没有在 Emacs 中找到等效于 vim 的 * 的内置函数,但我确实设法编写了这两个命令可能适合你:
(defun my-isearch-forward-word-at-point ()
"Search for word at point."
(interactive)
(let ((word (thing-at-point 'word t))
(bounds (bounds-of-thing-at-point 'word)))
(if word
(progn
(isearch-mode t nil nil nil t)
(when (< (car bounds) (point))
(goto-char (car bounds)))
(isearch-yank-string word))
(user-error "No word at point"))))
(defun my-isearch-forward-symbol-at-point ()
"Search for symbol at point."
(interactive)
(let ((symbol (thing-at-point 'symbol t))
(bounds (bounds-of-thing-at-point 'symbol)))
(if symbol
(progn
(isearch-mode t nil nil nil 'isearch-symbol-regexp)
(when (< (car bounds) (point))
(goto-char (car bounds)))
(isearch-yank-string symbol))
(user-error "No symbol at point"))))
(global-set-key (kbd "M-s ,") 'my-isearch-forward-word-at-point)
(global-set-key (kbd "M-s .") 'my-isearch-forward-symbol-at-point)
如您所见,我将这些命令绑定到 M-s 、 和 M-s .。
根据您的 Emacs 版本,您可以使用内置命令 isearch-forward-symbol-at-point
(默认绑定到 M-s .)。
需要基于正则表达式的搜索,例如
M-x isearch-forward-regexp
RET \_<axi\_>
RET
查看 Emacs Lisp 信息文件, 节点 34.3.1.3:正则表达式中的反斜杠构造
运行 作为命令:
(defun my-re-search-forward (&optional word)
"Searches for the last copied solitary WORD, unless WORD is given. "
(interactive)
(let ((word (or word (car kill-ring))))
(re-search-forward (concat "\_<" word "\_>") nil t 1)
(set-mark (point))
(goto-char (match-beginning 0))
(exchange-point-and-mark)))
绑定到C-c : 例如:
(global-set-key [(control c) (\:)] 'my-re-search-forward)