在Vim中搜索后的中心光标位置

wrrgggsh  于 2023-06-30  发布在  其他
关注(0)|答案(3)|浏览(126)

我希望Vim在搜索后将光标放在屏幕中间。我已经在.vimrc中使用以下行实现了*#nN命令

nmap * *zz
nmap # #zz
nmap n nzz
nmap N Nzz

我的问题是:如何以相同的方式Map/??即我想定位光标后,一些文字已被发现使用

/some-text-to-find-forward
?some-text-to-find-backward
nzrxty8p

nzrxty8p1#

编辑:扔掉了我最初的答案,因为它太多的组装。这里有个更好的解决方案。

function! CenterSearch()
  let cmdtype = getcmdtype()
  if cmdtype == '/' || cmdtype == '?'
    return "\<enter>zz"
  endif
  return "\<enter>"
endfunction

cnoremap <silent> <expr> <enter> CenterSearch()

其工作方式是将命令行模式下的Enter重新Map到自定义表达式。
如果命令行当前正在进行搜索,则该函数执行当前搜索,然后执行zz。否则,它只执行正在执行的任何命令。

c8ib6hqw

c8ib6hqw2#

不是很漂亮但是

:nnoremap / :execute "normal! /\<lt>cr>zz"<c-left><right>

就能完成任务(将:execute "normal! /"命令放在命令行上,然后在其末尾添加<cr>zz,以便在发出命令时自动执行zz。最后一个<c-left><right>刚好在正确的位置进入搜索模式

sdnqo3pr

sdnqo3pr3#

兰迪·莫里斯的解决方案,但作为一个在线:

cnoremap <silent><expr> <enter> index(['/', '?'], getcmdtype()) >= 0 ? '<enter>zz' : '<enter>'

相关问题