我经常将文本行转换为数组。例如,这个:
Monday
Tuesday
Wednesday
Run Code Online (Sandbox Code Playgroud)
变成:
[
'Monday',
'Tuesday',
'Wednesday',
]
Run Code Online (Sandbox Code Playgroud)
我可以制作一张地图,改变其中一行(例如Monday到'Monday',),如下所示:
:nnoremap gsa ^i'<Esc>A,
我想要做的是让该命令采取运动或文本对象,以便我可以像gsaip或一样执行它gsip3j。
我怎样才能做到这一点?
您可以使用'operatorfunc'withg@ 来制作带有运动的地图。帮助在:map-operator主题下给出了完整的解释和示例
。基本上,您可以在地图中设置要调用的函数并使用g@. Vim会等待一个动作,然后设置标志'[,并']电话通知功能。
在您的函数中,您可以发挥创意,这里我只是简单地举例说明了如何将这一原则应用于您需要的内容。
:nnoremap <silent> gsa :set opfunc=TransformToArray<cr>g@
function! TransformToArray(type)
if a:type == 'line'
let s=line("'[") " saving beginning mark
']s/\(\s*\).*\zs/\r\1]
exec s ",']-1s/\\s*\\zs.*/ '&',"
exec s 's/\(\s*\)\zs\ze /[\r\1'
elseif a:type == 'char'
" ...
endif
endfunction
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1144 次 |
| 最近记录: |