gpt4 book ai didi

vim - 捕获中断/中断命令

转载 作者:行者123 更新时间:2023-12-04 22:20:49 25 4
gpt4 key购买 nike

我想打断一个 for循环,例如在下面的代码中,

for num in buffer_number_list
" Select the buffer
exe 'buffer' num
" Run the command that's passed as an argument
exe a:command
" Save if necessary
update
endfor

而不是仅中断行 exe a:command , 当 a:command是一个 :s/// command .

目的是更改响应 How to do search & replace with ack in vim? 的代码

我试过绕行 exe a:commandtry/ catch堵塞,
但它不起作用,可能是因为该命令处理了中断
信号而不重新抛出它。

尝试重新映射 CTRL-c更改一些变量(将在循环内检查),但它不起作用:
let original_Ctrl_c = maparg('<c-c>', 'n')
exe 'nnoremap <c-c> :call <SID>BreakLoop()<CR>' . original_Ctrl_c

当中断信号是时,似乎映射没有触发
捕获。

有任何想法吗?

编辑:

似乎这个问题只发生在 gVim 中(感谢@ib。)

最佳答案

试图重现你描述的行为我已经构建了以下内容
测试用例。它包括使用命令创建的两个相同的文件

$ echo -e "skip\npat\npat" | tee tmp1 >tmp2

并在 Vim 中打开,除了获取文件外没有任何初始化
包含 :QFDo 的实现命令:
$ vim -u NONE -S qfdo.vim

或者
$ gvim -u NONE -U NONE -S qfdo.vim

在这两个文件中搜索模式,
:vimgrep /pat/ tmp{1,2}

填充可用于运行快速修复窗口的内容
有问题的命令,
:QFDo v/skip/s/pat/rep/gce

在第一个之后使用 Ctrl+C 中断此命令
替换,它恰好在文件 tmp1 中, 终止整个 :QFDo命令,因此文件 tmp2保持不变。这个事实
意味着您试图克服的行为是由某些 .vimrc 引起的
定制或插件。定位实际配置中断
Ctrl+C 行为,禁用所有插件并尝试
每次都让他们一一运行上面的测试用例。

关于vim - 捕获中断/中断命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7485740/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com