我希望Vim在搜索后将光标放在屏幕中间。我已经在.vimrc中使用以下行实现了*、#、n和N命令
*
#
n
N
nmap * *zz nmap # #zz nmap n nzz nmap N Nzz
我的问题是:如何以相同的方式Map/和??即我想定位光标后,一些文字已被发现使用
/
?
/some-text-to-find-forward ?some-text-to-find-backward
nzrxty8p1#
编辑:扔掉了我最初的答案,因为它太多的组装。这里有个更好的解决方案。
function! CenterSearch() let cmdtype = getcmdtype() if cmdtype == '/' || cmdtype == '?' return "\<enter>zz" endif return "\<enter>" endfunction cnoremap <silent> <expr> <enter> CenterSearch()
其工作方式是将命令行模式下的Enter重新Map到自定义表达式。如果命令行当前正在进行搜索,则该函数执行当前搜索,然后执行zz。否则,它只执行正在执行的任何命令。
c8ib6hqw2#
不是很漂亮但是
:nnoremap / :execute "normal! /\<lt>cr>zz"<c-left><right>
就能完成任务(将:execute "normal! /"命令放在命令行上,然后在其末尾添加<cr>zz,以便在发出命令时自动执行zz。最后一个<c-left><right>刚好在正确的位置进入搜索模式
:execute "normal! /"
<cr>zz
zz
<c-left><right>
sdnqo3pr3#
兰迪·莫里斯的解决方案,但作为一个在线:
cnoremap <silent><expr> <enter> index(['/', '?'], getcmdtype()) >= 0 ? '<enter>zz' : '<enter>'
3条答案
按热度按时间nzrxty8p1#
编辑:扔掉了我最初的答案,因为它太多的组装。这里有个更好的解决方案。
其工作方式是将命令行模式下的Enter重新Map到自定义表达式。
如果命令行当前正在进行搜索,则该函数执行当前搜索,然后执行zz。否则,它只执行正在执行的任何命令。
c8ib6hqw2#
不是很漂亮但是
就能完成任务(将
:execute "normal! /"
命令放在命令行上,然后在其末尾添加<cr>zz
,以便在发出命令时自动执行zz
。最后一个<c-left><right>
刚好在正确的位置进入搜索模式sdnqo3pr3#
兰迪·莫里斯的解决方案,但作为一个在线: