【发布时间】:2013-07-10 23:23:28
【问题描述】:
我想在 Vim 中使用键盘快捷键将整个函数从 Powershell 文件复制到 Windows 剪贴板。这是它的命令:
1) va{Vok"*y - 可视模式,选择 {} 块,可视行模式,转到选择顶部,包括标题行,拉到 Windows 剪贴板。
但它只适用于没有内部 {} 块的函数。这是一个有效的解决方法:
2) va{a{a{a{a{a{a{Vok"*y - 与 (1) 相同,但多次选择 {} 块 - 适用于具有 7 个内部 {} 大括号的代码块。
但问题是 - (1) 命令在从 vim 函数调用时工作正常,但 (2) 在从 vim 函数调用时行为不端并选择了错误的代码块:
function! CopyCodeBlockToClipboard ()
let cursor_pos = getpos('.')
execute "normal" 'va{a{a{a{a{a{a{Vok"*y'
call setpos('.', cursor_pos)
endfunction
" Copy code block to clipboard
map <C-q> :call CopyCodeBlockToClipboard()<CR>
我在 CopyCodeBlockToClipboard 中做错了什么? (2) 命令在 vim 中直接执行时按预期工作。
更新:
我注意到了:
- 如果有更多 a{ 则函数中包含的块
- 那么 vim 不会执行 V
看起来 vim 在这里处理错误的方式不同。额外的 a{ 会产生一些错误,并且常规命令执行会忽略它。但是通过 :normal 使用函数执行失败并且不会调用 V(或者可能是错误之后的任何命令)。
有什么解决方法吗?
【问题讨论】:
-
从外观上看,您想从函数中的任意位置执行此操作。这是正确的吗?
-
是的。函数中使用 {} 大括号表示代码块并始终使用一行作为函数标题的函数中的任何位置。