我有一个共享库(二进制形式;我有源代码),用于在Visual Studio中的源文件中的符号之间进行反转/循环。
我希望能够在vi和/或Vim中使用相同的功能。
具体来说,我想做的是以下场景:
我没有任何线索,如果/如何让vi / Vim这样做,我没有运气搜索。
感激地收到任何建议......
答案 0 :(得分:6)
尝试
inoremap <C-i> <esc>"hciw<C-R>=libcall('path/to/your.dll', 'func', @h)<CR>
它的作用:
如果您想使用可以从命令行运行的简单二进制文件,您可以使用
inoremap <C-i> <esc>"hciw<C-R>=substitute(system('mybin --word='.@h), "\n", '', 'g')<CR>
答案 1 :(得分:1)
我不知道如何从普通的vim脚本调用共享库,但是如果你可以为你的库创建一个python包装器并且你使用的是大于7的vim版本,你可以在其中调用python脚本VIM。
首先,检查您是否启用了python支持:键入
:version
在vim里面列出可用的功能;如果它有python支持,你应该在某处看到'+ python'(否则为'-python')。如果你没有启用python,你可以参考this post来编译带有python支持的vim。
然后,您可以映射一个键,用当前在光标下的单词调用python函数:
python << EOF
import vim
import MySharedLibraryPythonBinding
def MyFunction():
# get word under cursor
x = vim.eval('expand ("<cword>")')
# get replacement
MySharedLibraryPythonBinding.GetReplacement(x)
# replace contents (you'll need some work here...)
vim.current.line = "add something sensible here..."
EOF
nmap <F3> :py MyFunction( expand("<cword>") )<CR>
这当然不是一个完全有效的解决方案,但我希望它会让你走上良好的道路。
答案 2 :(得分:1)
有很多方法可以做到这一点(:h expand(),...)。其中一个是以下内容)
:nnoremap triggerkeysequence ciw<c-r>=libcall('path/to/your.dll', 'your_function',@")<cr>
BTW:<c-i>
是<tab>
,您确定要覆盖此密钥的操作吗?