Vim:如何在命令历史记录中插入命令?
我有一个映射,在该映射中,我可以选择文本并键入(引线)av到ack以进行视觉选择:Vim:如何在命令历史记录中插入命令?,vim,keyboard-shortcuts,ack,Vim,Keyboard Shortcuts,Ack,我有一个映射,在该映射中,我可以选择文本并键入(引线)av到ack以进行视觉选择: “视觉确认,用于确认突出显示的文本 函数!s:VAck() 让old=@“ 标准gvy 让@z=替换(转义(@“,'\'),'\n','\\n','g') 让"老", 端功能 “视觉选择确认” vnoremap av:call VAck():exe“确认!“@z.” 但是,我经常想重新确认我搜索的最后一个内容,所以我键入:up以通过我的命令历史向后搜索它。问题是,此方法不会填充历史 我的问题是我该如何做以下一项
“视觉确认,用于确认突出显示的文本
函数!s:VAck()
让old=@“
标准gvy
让@z=替换(转义(@“,'\'),'\n','\\n','g')
让"老",
端功能
“视觉选择确认”
vnoremap av:call VAck():exe“确认!“@z.”
但是,我经常想重新确认我搜索的最后一个内容,所以我键入:up以通过我的命令历史向后搜索它。问题是,此方法不会填充历史
我的问题是我该如何做以下一项:
- 使用Vimscript-或-在命令行历史记录中插入一个条目
- 使它生成的命令实际作为冒号命令执行,以便自动填充历史记录
我完全了解
:copen
和:colder
命令,可以打开并浏览到较旧的快速修复列表(会填充),但我想知道如何解决上述问题,因为当我知道部分源代码已更改时,我想重新确认相同的问题。当它们是映射的一部分时,命令不会添加到命令历史记录中
使用histadd()
函数将项目添加到特定历史记录中:
call histadd("cmd", "e $MYVIMRC")
请参阅:help histadd()
您可以先让函数返回搜索模式,而不是破坏寄存器:
function! VAck()
let old = @"
norm! gvy
let pat = substitute(escape(@", '\'), '\n', '\\n', 'g')
let @" = old
return pat
endfunction
这将允许您简化基本映射:
vnoremap <Leader>av :<C-u>exe "Ack! " . VAck()<CR>
vnoremap <Leader>av :<C-u>exe "Ack! " . VAck()<CR>
vnoremap <Leader>av :<C-u>let cmd = "Ack! " . VAck() <bar> call histadd("cmd", cmd) <bar> execute cmd<CR>
function! VAck()
let old = @z
norm! gv"zy
let pat = substitute(escape(@z, '\'), '\n', '\\n', 'g')
let @z = old
return pat
endfunction