在Vim中搜索后居中光标位置 我希望VIM在搜索后把光标放在屏幕中间。我已经在.vimrc中实现了*、#、n和n命令 nmap * *zz nmap # #zz nmap n nzz nmap N Nzz

在Vim中搜索后居中光标位置 我希望VIM在搜索后把光标放在屏幕中间。我已经在.vimrc中实现了*、#、n和n命令 nmap * *zz nmap # #zz nmap n nzz nmap N Nzz,vim,Vim,我的问题是:如何以相同的方式映射/和??也就是说,我想在使用 /some-text-to-find-forward ?some-text-to-find-backward 它不是很漂亮,但是 :nnoremap / :execute "normal! /\<lt>cr>zz"<c-left><right> :nnoremap/:执行“正常!/\cr>zz” 我会把工作做完的。(放置一个:执行“正常!”命令,然后在命令行的末尾添加一个zz,这样,当您

我的问题是:如何以相同的方式映射
/
?也就是说,我想在使用

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

它不是很漂亮,但是

:nnoremap / :execute "normal! /\<lt>cr>zz"<c-left><right>
:nnoremap/:执行“正常!/\cr>zz”

我会把工作做完的。(放置一个
:执行“正常!”
命令,然后在命令行的末尾添加一个
zz
,这样,当您发出命令时,您可以自动
zz
。最后的
只需在正确的位置进入搜索模式

编辑:丢弃我的初始答案,因为它太麻烦了。这里有一个更好的解决方案

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

cnoremap <silent> <expr> <enter> CenterSearch()
函数!中心搜索()
让cmdtype=getcmdtype()
如果cmdtype='/'| | cmdtype=='?'
返回“\zz”
恩迪夫
返回“\”
端功能
cnoremap CenterSearch()
其工作方式是在命令行模式下将Enter重新映射到自定义表达式


如果命令行当前处于搜索中,该函数将执行当前搜索,然后执行zz。否则,它只执行正在执行的任何命令。

来自Randy Morris的解决方案,但作为一个单行程序:

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

The可以做到这一点。但它有很多依赖项,有时会造成滞后。谢谢!你说得对:它“不太漂亮”,但很有效:)我已经尝试过,并将其放入我的vimrc中,但现在我想尝试Randy的解决方案,它似乎更干净一点;)他是更好的版本(更干净,没有那么多机会弄糟一个错误的退格…),我很困惑为什么我自己没有想到它。多谢他,谢谢你!工作起来很有魅力!