改代码『已经解决』

Vim、Emacs配置和使用
回复
mafn
帖子: 77
注册时间: 2011-04-23 5:28
来自: 汕尾遮浪

改代码『已经解决』

#1

帖子 mafn » 2012-08-27 14:14

vim新手。想在vimrc添加两个自定义功能:
一、打开一个文件后,自动搜索同目录下是否有会话文件(后缀.ses),若有则加载该文件;
二、保存一个文件时,自动搜索同目录下是否有会话文件(后缀.ses),若有则更新该文件。

代码如下:

autocmd BufReadPost *
\ let s:session_file = expand("%") . ".ses" |
\ if filereadable(s:session_file) == 1 |
\ source s:session_file |
\ endif

autocmd BufWritePost *
\ if filewritable(s:session_file) == 1 |
\ mksession! s:session_file |
\ else |
\ echo "please run mksession! " |
\ enif

运行后发现source和mksession两个命令根本不会把s:session_flle变量替换为我希望的文件。

请各位大侠指点一下。谢谢!
上次由 mafn 在 2012-08-28 0:37,总共编辑 1 次。
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: 改代码

#2

帖子 lilydjwg » 2012-08-27 16:06

代码: 全选

:h s:
wz520
帖子: 36
注册时间: 2010-09-23 13:47

Re: 改代码

#3

帖子 wz520 » 2012-08-27 18:04

把 s:session_file 改成 b:session_file 试试

代码: 全选

:h b:
mafn
帖子: 77
注册时间: 2011-04-23 5:28
来自: 汕尾遮浪

Re: 改代码

#4

帖子 mafn » 2012-08-27 22:13

wz520 写了:把 s:session_file 改成 b:session_file 试试
试了一下,改成 b:session_file 也是不行的。
mafn
帖子: 77
注册时间: 2011-04-23 5:28
来自: 汕尾遮浪

Re: 改代码

#5

帖子 mafn » 2012-08-27 22:14

lilydjwg 写了:

代码: 全选

:h s:
不好意思,我是新手,这个:h s:具体是什么做法?我还不太明白。
mafn
帖子: 77
注册时间: 2011-04-23 5:28
来自: 汕尾遮浪

Re: 改代码

#6

帖子 mafn » 2012-08-27 22:40

lilydjwg 写了:

代码: 全选

:h s:
不好意思。我实在太鱼了。才反应过来是察看s:的帮助文件。

不过还是没有找到相关提示。还求明示!
mafn
帖子: 77
注册时间: 2011-04-23 5:28
来自: 汕尾遮浪

Re: 改代码

#7

帖子 mafn » 2012-08-27 23:01

我始终觉得问题不在于这个变量
——因为我最初写的时候,这个变量名用session_file,问题那时已经存在。

因为担心这个变量会影响全局,才前缀了s:。

如果在\ if filereadable(s:session_file) == 1 |和\ source s:session_file |之间加入一行:
echo s:session_file . "can be shown."
这个s:session_file是可以被替换为具体的ses文件名的。

所以,我觉得问题出在source和mksession这两个命令。
mafn
帖子: 77
注册时间: 2011-04-23 5:28
来自: 汕尾遮浪

Re: 改代码

#8

帖子 mafn » 2012-08-28 0:36

在手册starting找到的答案。原来是书写不规范!

那两行应该改为类似下面的格式:
/ execute "source" s:sesion_file |

就没问题了!

最后感谢二楼三楼的热心帮助!
回复