概述:1个问题+类似情境的一半问题(在类似用例下)
目标: 我在缓冲区中有一些vimL代码,我想通过按键来运行它们。
描述:
与gc{motion_or_text_object}
类似 - 键入'gcip'
来评论整个段落,或
'gc3j'
评论4行。 (安装tComment后)
或'>i}'
缩进块,'4<<'
缩进4行。
当前部分解决方案: 目前我使用视觉模式和地图下方:
vnoremap <F2> :<c-u>exec join(getline("'<","'>"),"\n")<CR>
但有时使用操作员挂起模式更自然,有时则更自然 更好地使用线魔术。
类似用例:
此外,我有一个部分解决方案来运行外部命令而不是vimscript命令。
" below nnoremap works for both single line and multiple line,
" both 'qr' and '5qr' work. (note the dot before w)
nnoremap qr :.w !bash -euo pipefail<CR>
vnoremap qr :w !bash -euo pipefail<CR>
适用于视觉选择和线条魔术;但目前我不知道如何修改它 它也适用于{motion_or_text_object}。
答案 0 :(得分:2)
您需要一个自定义运算符来执行{motion}
移动的文本。当Vim将其转换为两个标记时,解决方案类似于您的可视模式映射(只要您只想执行整行)。以下内容基于:help :map-operator
:
nnoremap <F2> :set opfunc=ExecuteLines<CR>g@
function! ExecuteLines(type)
exec join(getline("'[","']"),"\n")
endfunction
有了这个,您可以使用<F2>{motion}
执行这些行。要处理任意文本(不仅仅是整行),您必须评估a:type
参数,并获取确切的文本,可能是通过定义视觉选择并将其放入寄存器。
答案 1 :(得分:1)
:@"
。在可视模式映射中:
xnoremap <key> y:@"<CR>
用法:
vip<key>
但是,坦率地说,保证映射太容易了。
答案 2 :(得分:-1)
您可能会发现我的vimteractive插件提供了所需的功能,因为它允许您使用组合键Ctrl-S(以及许多其他REPL)将缓冲区中的行发送到bash终端: