dongtu1789 2017-08-17 12:16
浏览 120
已采纳

将vim外部命令结果行存储到VimL数组中,以进行一些自定义自动完成

This little snippet aims to make a little autocomplete script in VimL. the first code:

cat % | grep function | sed  's/(/ /g' | awk '{print $3}'

list all the method inside a php class. For example the output of this command could be:

__construct
__toString
foo
bar

If I send to complete function an array

call complete(col('.'), ["__construct", "__toString", "foo", "bar"])

I can see this menu:

enter image description here

So the final question is, ... how can I transform this:

__construct
__toString
foo
bar

into this ["__construct", "__toString", "foo", "bar"]?

Here my wrong code:

inoremap <F5> <C-R>=CustomComplete()<CR>
func! CustomComplete()
    let l:functions = system("cat % | grep function | sed  's/(/ /g' | awk '{print $3}'")
    call complete(col('.'), l:functions)
    return ''
endfunc
  • 写回答

1条回答 默认 最新

  • doutu9810 2017-08-17 13:15
    关注

    Refering to the current file

    First, the % symbol is only parsed in the command-line. With system(), you need to expand it on your own:

    system("cat " . expand('%') . " | grep function | sed  's/(/ /g' | awk '{print $3}'")
    

    Now, there can be special characters in the current filename. To be safe, wrap the result in shellescape():

    system("cat " . shellescape(expand('%')) . " | grep function | sed  's/(/ /g' | awk '{print $3}'")
    

    Turning external command output into a List

    You can use the split() function with a {pattern} of (newline):

    let l:functions = split(
    \   system("cat " . shellescape(expand('%')) . " | grep function | sed  's/(/ /g' | awk '{print $3}'"),
    \   '
    '
    \)
    

    Recent Vim versions have systemlist(), just for this common use case:

    let l:functions = systemlist("cat " . shellescape(expand('%')) . " | grep function | sed  's/(/ /g' | awk '{print $3}'")
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)