Vim在中间屏幕搜索模式

时间:2015-10-21 15:09:36

标签: vim

是否有任何工作命令/重新映射,以便在我这样做时

:grep *mysearch* *here*

我用cnext迭代的结果,可以直接出现在屏幕中间吗? 理想情况下,我希望n迭代结果并在中间屏幕中显示该行,因此每次看到下一个结果时,我都不必在文件中找到光标的位置。 我尝试过很多东西,比如

map :<Leader>n :cnext zz<CR>  OR :cnext | :zz | <CR> 

或任何变化,但没有任何作用...... 有什么想法吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

根据here描述的技术,您可以执行以下操作:

" Keep quickfix result centered, if possible, when jumping from result to result.
cabbrev <silent> <expr> cn ((getcmdtype() == ':' && getcmdpos() == 3) ? 'cn <bar> normal zz<cr>' : 'cn')
cabbrev <silent> <expr> cnf ((getcmdtype() == ':' && getcmdpos() == 4) ? 'cnf <bar> normal zz<cr>' : 'cnf')
cabbrev <silent> <expr> cp ((getcmdtype() == ':' && getcmdpos() == 3) ? 'cp <bar> normal zz<cr>' : 'cp')
cabbrev <silent> <expr> cpf ((getcmdtype() == ':' && getcmdpos() == 4) ? 'cpf <bar> normal zz<cr>' : 'cpf')

我最初是had this in my dotfiles,但后来将其提取到一个插件中,其中包含一些名为Ferret的与搜索相关的功能。

答案 1 :(得分:0)

对于命令行模式,映射并不是一个好的解决方案;但是你尝试的主要错误是围绕zz的一些错误,这是一个普通模式的命令。它可能是:

:cmap <Leader>n :cnext<bar>normal zz

:cabbr对于这种情况确实更好。

wincent答案的简化版本是:

:cabbr cn cnext<bar>normal zz
:cabbr cn cnext\|normal zz

无法通过执行: cn(带空格)来访问原始命令,就像使用wincent的答案一样。

缩写命令的另一个好方法:cmdalias.vim,它只允许在命令行开头识别缩写。