Emacs搜索确切的单词

Jon*_*han 11 emacs xemacs

我大部分时间都在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;
Run Code Online (Sandbox Code Playgroud)

当搜索axi我想只在第4行得到匹配.今天Ctrl-S搜索将匹配每个实例axi.

在vim中,这样做的方法是在单词或/ \上按*.

emacs中有类似的东西吗?

谢谢分配,Jony

ton*_*nio 9

我认为您正在搜索激活的Word搜索功能M-s w.

您可以通过两种方式使用它:只需发出M-s w,然后键入要搜索的单词.或者为了*在vim中获得类似的东西,你可以用isearch开始搜索,用C-s C-w(搜索光标下的单词),然后M-s w将搜索切换到整个单词模式.

  • 这是最好的答案。如果由于某种原因 `Ms w` 没有绑定到此(因为你的初始化文件中的某些内容已经改变了它),请尝试 `Cs Ms w`。请参阅 Emacs 手册,节点 [`Word Search`](http://www.gnu.org/software/emacs/manual/html_node/emacs/Word-Search.html)。当然,如果您使用 XEmacs 那么情况可能会有所不同。 (2认同)

And*_*ler 5

需要基于正则表达式的搜索,例如

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)))
Run Code Online (Sandbox Code Playgroud)

绑定到C-c :例如:

(global-set-key [(control c) (\:)] 'my-re-search-forward)
Run Code Online (Sandbox Code Playgroud)