看起来vimspythonspripting是设计来编辑缓冲区和文件的,而不是很好地与vims寄存器一起工作。你可以使用一些vim包命令来访问寄存器,但这并不漂亮。
我使用python创建一个使用寄存器的vim函数的解决方案是这样的。
function printUnnamedRegister()
python <<EOF
print vim.eval('@@')
EOF
endfunction
设置寄存器也可以使用类似于
function setUnnamedRegsiter()
python <<EOF
s = "Some \"crazy\" string\nwith interesting characters"
vim.command('let @@="%s"' % myescapefn(s) )
EOF
endfunction
然而,这感觉有点麻烦,我不确定myescapefn应该是什么,所以我从来没有能够让设置版本正常工作。
所以如果有一种方法可以更像是
function printUnnamedRegister()
python <<EOF
print vim.getRegister('@')
EOF
endfunction
function setUnnamedRegsiter()
python <<EOF
s = "Some \"crazy\" string\nwith interesting characters"
vim.setRegister('@',s)
EOF
endfunction
或者甚至是一个很好的版本myescapefn我可以使用,然后将是非常方便的。
最新消息:
基于ZyX的解决方案,我使用这段python
def setRegister(reg, value):
vim.command( "let @%s='%s'" % (reg, value.replace("'","''") ) )
1条答案
按热度按时间2g32fytz1#
如果你使用单引号,你所需要做的就是用两个单引号替换每一个出现的单引号。
Update:此方法严重依赖于(未记录的)功能之间的差异
和
:第一个失败,第二个成功(这不是
:execute
和普通文件中换行符处理的唯一区别)。另一方面,eval()
更适合处理这个问题,因为string("string\nwith newline")
返回的内容与senclose
完全相同,所以我现在只使用vim.eval
来编写这些内容: