3

我很喜欢用#它来突出显示和搜索单词(变量),但如果我可以点击一个命令来简单地告诉我当前文件中出现了多少次,我会很高兴。我发现了以下内容

:%s/dns_name_change_flag/&/gn

但是打字太多了。有没有可能映射上面的单行以使用光标下的单词?

4

6 回答 6

5

我不知道没有execute. 以下映射F5使用<cword>和单词边界模式(\\<\\>)计算光标下单词的出现次数:

:map <f5> :execute ":%s@\\<" . expand("<cword>") . "\\>\@&@gn"<CR>
于 2012-07-15T14:05:56.813 回答
2
:map <F2> "zyiw:exe "%s/".@z."//gn"<CR>

将此行(不带“:”)添加到您的 .vimrc 中,每次启动 vim 时都会映射 F2。

它将“内部单词”拉到 z 寄存器中,然后在整个缓冲区中执行搜索,输出出现次数。

这种方法与Thor 给出的方法不同,它还计算单词的出现次数,这些单词本身不是单词,而只是单词的一部分。例如:寻找 'an' 也会计算 'and'


这也可能有帮助:

“一种快速列出光标下所有出现的单词的方法,然后键入[I(在使用 C 等语言时,在此文件和包含的文件中显示包含当前关键字的每一行)。”

来源:http: //vim.wikia.com/wiki/Word_count

于 2012-07-15T13:57:31.810 回答
1

将执行映射到 Grep

您可以将序列映射到外部 grep 命令。例如:

:nmap fg :execute '!fgrep --count <cword> %'<CR>

这会将正常模式命令映射到fg. 该命令将在外部进程中对当前文件运行fgrep ,计算光标下单词的实例。

小警告

这对当前文件而不是当前缓冲区进行操作。您需要确保在:write字数准确之前将文件写入磁盘(例如)。

于 2012-07-15T14:14:31.863 回答
1

我为此编写了一个插件:SearchPosition;它提供了当前搜索模式和当前单词/选择的映射,还列出了匹配发生的位置:

1 match after cursor in this line, 8 following, 2 in previous lines;
total 10 for /\<SearchPosition\>/
于 2012-07-15T19:13:12.660 回答
1
:nmap <Leader>* *<C-o>:%s///gn<CR><C-o>
于 2017-03-09T09:07:29.677 回答
1

我有一个不改变搜索寄存器的功能@/

fun! CountWordFunction()
    try
        let l:win_view = winsaveview()
        exec "%s/" . expand("<cword>") . "//gn"
    finally
        call winrestview(l:win_view)
    endtry
endfun
command! -nargs=0 CountWord :call CountWordFunction()
nnoremap <F3> :CountWord<CR>

如果你已经搜索过这个词,你可以输入

:%~n
于 2018-02-27T10:16:17.953 回答