我正在编写一个 vimscript 函数来将当前选定的行(可视模式)包装在 Ruby begin-rescue 块中。我有一些奇怪的行为。这是我的功能:
function! BeginRescueWrap()
execute "normal! gvd"
let head = "begin\<CR>"
let body = @"
let tail = "rescue StandardError =>e\<CR>binding.pry\<CR>end\<CR>"
execute "normal! i" . head . "\<CR>" . body . "\<CR>" . tail
endfunction
它几乎可以工作——出于某种原因,它只产生了头部和尾部的两个副本。例如,在选择此文本时运行该函数:
Oh lord won't you buy me a Mercedes Benz
My friends all drive Porsches, I must make amends
产生这个输出:
begin
begin
rescue StandardError =>e
binding.pry
end
Oh lord won't you buy me a Mercedes Benz
My friends all drive Porsches, I must make amends
rescue StandardError =>e
binding.pry
end
我不在乎缩进(以后可以解决)。请注意,有一个外包装,其中包括一个空的内包装,后跟目标行。我究竟做错了什么?