查找光标下单词的出现次数

时间:2012-07-15 13:22:07

标签: vim

我很高兴使用来突出显示并搜索一个单词(变量),但我很乐意,如果我可以点击一个命令就可以告诉我当前文件中有多少次出现。我找到了以下

:%s/dns_name_change_flag/&/gn

但那打字太多了。反正是否可以映射上面的单行使用光标下的单词?

6 个答案:

答案 0 :(得分:4)

如果没有execute,我不知道如何做到这一点。以下地图F5使用<cword>和字边界模式(\\<\\>)计算光标下单词的出现次数:

:map <f5> :execute ":%s@\\<" . expand("<cword>") . "\\>\@&@gn"<CR>

答案 1 :(得分:2)

:map <F2> "zyiw:exe "%s/".@z."//gn"<CR>

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

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

这种方法与the one given by Thor的不同之处在于,它还计算单词的外观,这些单词本身不是单词,而只是单词的一部分。例如:寻找'an'也会计算'和'


这也可能有用:

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

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

答案 2 :(得分:1)

地图执行到Grep

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

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

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

次要警告

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

答案 3 :(得分:1)

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

1 match after cursor in this line, 8 following, 2 in previous lines;
total 10 for /\<SearchPosition\>/

答案 4 :(得分:1)

:nmap <Leader>* *<C-o>:%s///gn<CR><C-o>

答案 5 :(得分:0)

我的功能不会改变搜索寄存器@/

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