我很高兴使用#来突出显示并搜索一个单词(变量),但我很乐意,如果我可以点击一个命令就可以告诉我当前文件中有多少次出现。我找到了以下
:%s/dns_name_change_flag/&/gn
但那打字太多了。反正是否可以映射上面的单行使用光标下的单词?
答案 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)。“
答案 2 :(得分:1)
您可以将序列映射到外部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