Vim复制多行至命令行时换行符显示异常及高亮需求咨询
我来帮你解决这两个Vim使用中的问题:把多行粘贴到搜索模式时的换行符转成\r,以及高亮命令行里的粘贴内容。
一、让粘贴的换行符变成搜索模式的\r
你用Vjy复制多行后,寄存器里存的是实际的换行(显示为^M),但Vim搜索模式需要用\r来表示换行匹配。直接<C-r>"粘贴肯定不对,这里可以用表达式寄存器来实时转换:
在输入/进入搜索模式后,按下:
<C-r>=substitute(@", '\n', '\\r', 'g')<CR>
这个命令会把寄存器"里的所有换行符替换成搜索需要的\r(这里\\r是因为要转义反斜杠,确保在搜索模式里显示成单个\r),粘贴后就会得到你想要的/line1\rline2。
嫌每次输入麻烦的话,直接在~/.vimrc里加个命令行映射:
cnoremap <expr> <C-r>" substitute(@", '\n', '\\r', 'g')
之后再按<C-r>"粘贴,就自动帮你转好换行符了,一步到位。
二、高亮命令行里的粘贴内容
想要高亮命令行内容但不用选中,咱们可以用Vim的matchadd()函数,借用搜索结果的Search高亮样式(你也可以自定义别的样式)。
手动触发高亮
在~/.vimrc里加这段配置:
function! CmdLineHighlight() call clearmatches() " 先清掉之前的高亮,避免重叠 call matchadd('Search', getcmdline()) " 给当前命令行内容加高亮 redraw " 强制刷新界面让高亮生效 endfunction " 命令行模式下按<C-h>触发高亮 cnoremap <C-h> :call CmdLineHighlight()<CR>
粘贴完内容后,按<C-h>就能立刻高亮显示,看代码块特别清楚。
自动高亮命令行内容
要是想每次命令行内容变了就自动高亮,加个自动命令就行:
autocmd CmdlineChanged * call clearmatches() | call matchadd('Search', getcmdline())
这样不管是输入、粘贴还是修改命令行内容,都会自动高亮,适合经常需要盯着命令行的场景。不想高亮了就按<C-l>,这是Vim默认清除屏幕高亮的快捷键。
内容的提问来源于stack exchange,提问作者undg
相关产品推荐
相关产品推荐

