是否有任何工作命令/重新映射,以便在我这样做时
:grep *mysearch* *here*
我用cnext
迭代的结果,可以直接出现在屏幕中间吗?
理想情况下,我希望n迭代结果并在中间屏幕中显示该行,因此每次看到下一个结果时,我都不必在文件中找到光标的位置。
我尝试过很多东西,比如
map :<Leader>n :cnext zz<CR> OR :cnext | :zz | <CR>
或任何变化,但没有任何作用...... 有什么想法吗?
谢谢!
答案 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,它只允许在命令行开头识别缩写。