[已解决]怎么才能让Vim识别PHP的EOT字符串?

Vim、Emacs配置和使用
回复
iny
帖子: 142
注册时间: 2008-05-22 9:43

[已解决]怎么才能让Vim识别PHP的EOT字符串?

#1

帖子 iny » 2009-05-15 23:46

一般情况下,字符串都是单引号和双引号,但是PHP有一种特殊的字符串,是以“<<<EOT”开头,EOT(EOT必须在行首,否则语法是错误的)结尾的字符串,类似于下面这种形式:
$val = 'hello';
$str = <<<EOT
我是一个字符串
变量的值={$val}
EOT;
是向上相当于
$str = "我是一个字符串\n变量的值={$val}"
而Vim只能识别第二种,第一种无法识别
上次由 iny 在 2009-05-17 12:37,总共编辑 1 次。
头像
darasion
帖子: 1153
注册时间: 2007-12-05 12:25

Re: 怎么才能让Vim识别PHP的EOT字符串?

#2

帖子 darasion » 2009-05-16 0:21

其实,你不用EOT,用别的什么也可以,只要前后一致即可。

这种很长文章的字符串变量,一般都是保存在单独的文件里边,用到的时候 include 进来,我觉得没必要显示那么好看吧?

刚刚试验了一下可以正常显示,你说的是高亮显示语法么?

iny
帖子: 142
注册时间: 2008-05-22 9:43

Re: 怎么才能让Vim识别PHP的EOT字符串?

#3

帖子 iny » 2009-05-16 1:15

darasion 写了:其实,你不用EOT,用别的什么也可以,只要前后一致即可。

这种很长文章的字符串变量,一般都是保存在单独的文件里边,用到的时候 include 进来,我觉得没必要显示那么好看吧?

刚刚试验了一下可以正常显示,你说的是高亮显示语法么?

只能识别EOT,也能识别EOT里面的变量{$val},但是不能识别字符串,假如字符串的颜色为绿色,而EOT内部的字符串就不会变成绿色。
头像
darasion
帖子: 1153
注册时间: 2007-12-05 12:25

Re: 怎么才能让Vim识别PHP的EOT字符串?

#4

帖子 darasion » 2009-05-16 4:44

iny 写了:
darasion 写了:其实,你不用EOT,用别的什么也可以,只要前后一致即可。

这种很长文章的字符串变量,一般都是保存在单独的文件里边,用到的时候 include 进来,我觉得没必要显示那么好看吧?

刚刚试验了一下可以正常显示,你说的是高亮显示语法么?

只能识别EOT,也能识别EOT里面的变量{$val},但是不能识别字符串,假如字符串的颜色为绿色,而EOT内部的字符串就不会变成绿色。
vim这样显示是正确的。可能你的理解有偏差。

还有,不一定非要EOT的,别的什么都可以用,比如你可以这么写:

代码: 全选

$str = <<<AAA
各种各样的文字,段落什么的。。。。。
这里的是纯字符串,里边有html什么的也不会特殊显示。
AAA;
vim的显示如图:
Screenshot-a.php (-var-www-php) - GVIM.png
iny
帖子: 142
注册时间: 2008-05-22 9:43

Re: 怎么才能让Vim识别PHP的EOT字符串?

#5

帖子 iny » 2009-05-16 20:34

vim这样显示是正确的。可能你的理解有偏差。

还有,不一定非要EOT的,别的什么都可以用,比如你可以这么写:

代码: 全选

$str = <<<AAA
各种各样的文字,段落什么的。。。。。
这里的是纯字符串,里边有html什么的也不会特殊显示。
AAA;
vim的显示如图:
附件 Screenshot-a.php (-var-www-php) - GVIM.png 已经无效
是的,不光是EOT,还可以自定义。
不过显示确实不对,就拿你这副图来说,hello是字符串,EOF里面也是字符串,那么除EOF里面的变量之外,其它的字符串也应该和hello是一样的颜色(都是字符串)。
下图是NetBeans IDE里面的显示效果,这样就完全正确了。
附件
NetBeans_EOT.gif
NetBeans_EOT.gif (4.6 KiB) 查看 1020 次
头像
darasion
帖子: 1153
注册时间: 2007-12-05 12:25

Re: 怎么才能让Vim识别PHP的EOT字符串?

#6

帖子 darasion » 2009-05-16 20:50

iny 写了:
vim这样显示是正确的。可能你的理解有偏差。

还有,不一定非要EOT的,别的什么都可以用,比如你可以这么写:

代码: 全选

$str = <<<AAA
各种各样的文字,段落什么的。。。。。
这里的是纯字符串,里边有html什么的也不会特殊显示。
AAA;
vim的显示如图:
Screenshot-a.php (-var-www-php) - GVIM.png
是的,不光是EOT,还可以自定义。
不过显示确实不对,就拿你这副图来说,hello是字符串,EOF里面也是字符串,那么除EOF里面的变量之外,其它的字符串也应该和hello是一样的颜色(都是字符串)。
下图是NetBeans IDE里面的显示效果,这样就完全正确了。
你可以这样理解:vim 用颜色区分了两种不同形式的字符串。

一种是常规的$str='abc';
另外一种是$str=<<<EOT
abc
EOT;

iny
帖子: 142
注册时间: 2008-05-22 9:43

Re: 怎么才能让Vim识别PHP的EOT字符串?

#7

帖子 iny » 2009-05-16 20:57

你可以这样理解:vim 用颜色区分了两种不同形式的字符串。

一种是常规的$str='abc';
另外一种是$str=<<<EOT
abc
EOT;
只能这样自我安慰了 :em20
poet
帖子: 2841
注册时间: 2006-09-11 22:47

Re: 怎么才能让Vim识别PHP的EOT字符串?

#8

帖子 poet » 2009-05-16 21:20

iny 写了:一般情况下,字符串都是单引号和双引号,但是PHP有一种特殊的字符串,是以“<<<EOT”开头,EOT(EOT必须在行首,否则语法是错误的)结尾的字符串,类似于下面这种形式:
$val = 'hello';
$str = <<<EOT
我是一个字符串
变量的值={$val}
EOT;
是向上相当于
$str = "我是一个字符串\n变量的值={$val}"
而Vim只能识别第二种,第一种无法识别
这个没有什么难,只要改改 syntax/php.vim 就可以实现了。如果你不想修改官方的,可以 cp 过来到自己的 ~/.vim/syntax 目录下进行编辑。

这种语法运用得非常多,并不光是 php 用。其实我在 syntax/lpc.vim 中已经实现了类似的语法着色。另外chip博士在 sh.vim 的脚本里应该也实现了类似的语法的。

理论上,你应该可以在你的 vim 发行版中找到 syntax 目录并自己研究一下相关语法着色。
iny
帖子: 142
注册时间: 2008-05-22 9:43

Re: 怎么才能让Vim识别PHP的EOT字符串?

#9

帖子 iny » 2009-05-16 21:27

poet 写了: 这个没有什么难,只要改改 syntax/php.vim 就可以实现了。如果你不想修改官方的,可以 cp 过来到自己的 ~/.vim/syntax 目录下进行编辑。

这种语法运用得非常多,并不光是 php 用。其实我在 syntax/lpc.vim 中已经实现了类似的语法着色。另外chip博士在 sh.vim 的脚本里应该也实现了类似的语法的。

理论上,你应该可以在你的 vim 发行版中找到 syntax 目录并自己研究一下相关语法着色。
你说到点子上了,就是这个意思
不过我不会修改syntax/???.vim :em06
我的这个问题怎么修改?麻烦指教 :em02
头像
darasion
帖子: 1153
注册时间: 2007-12-05 12:25

Re: 怎么才能让Vim识别PHP的EOT字符串?

#10

帖子 darasion » 2009-05-16 21:46

还是默认的好,要不换个地方还要带着一堆配置文件。。。
starwing
帖子: 100
注册时间: 2008-09-19 1:03

Re: 怎么才能让Vim识别PHP的EOT字符串?

#11

帖子 starwing » 2009-05-17 10:02

其实根本不用改的,你自己输入这一行就可以看到效果了:
:hi link phpheredoc string

如果觉得效果满意,把上面一行加入vimrc就可以了。
iny
帖子: 142
注册时间: 2008-05-22 9:43

Re: 怎么才能让Vim识别PHP的EOT字符串?

#12

帖子 iny » 2009-05-17 12:37

starwing 写了:其实根本不用改的,你自己输入这一行就可以看到效果了:
:hi link phpheredoc string

如果觉得效果满意,把上面一行加入vimrc就可以了。
爽啊,原来这么一句设定就搞定了,太感谢了! :em06
回复