12

我大部分时间都在使用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中是否有类似的东西?

谢谢分配,乔尼

4

3 回答 3

9

我认为您正在搜索单词搜索功能,使用M-s w.

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

于 2015-05-19T14:17:17.120 回答
7

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

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)
于 2015-05-19T17:16:29.777 回答
2

我没有在 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 ,and M-s .。根据您的 Emacs 版本,您可能能够使用内置命令isearch-forward-symbol-at-point(默认绑定M-s .)。

于 2015-05-19T15:58:58.560 回答