index() 总是返回 -1

Vim、Emacs配置和使用
回复
头像
自由建客
论坛版主
帖子: 13436
注册时间: 2008-07-30 23:21
系统: Debian stable AMD64
来自: freebuilder@yeah.net
送出感谢: 12 次
接收感谢: 112 次
联系:

index() 总是返回 -1

#1

帖子 自由建客 » 2011-03-13 22:45

代码: 全选

let s:path="/usr/share/vim/gvimrc"
let s:sstr=""
redir => s:sstr
silent script
redir END
let s:slist=split(s:sstr, "\n")
for item in s:slist
	let item=substitute(item, '.\+:\s*', '', '')
	" 加上检查一下,结果是对的,存在 /usr/share/vim/gvimrc
	echo item	
endfor

" 问题在于永远是 -1
let s:i=index(s:slist, s:path)
if s:i!=-1
	echo "####" s:i+1
else
	echo "****" s:i
endif
最后结果总是
**** -1
1.png
头像
自由建客
论坛版主
帖子: 13436
注册时间: 2008-07-30 23:21
系统: Debian stable AMD64
来自: freebuilder@yeah.net
送出感谢: 12 次
接收感谢: 112 次
联系:

Re: index() 总是返回 -1

#2

帖子 自由建客 » 2011-03-13 23:47

明白了,都是 for 惹得祸!item 是右值而非左值。
头像
lilydjwg
论坛版主
帖子: 4163
注册时间: 2009-04-11 23:46
系统: Arch Linux
送出感谢: 11 次
接收感谢: 127 次
联系:

Re: index() 总是返回 -1

#3

帖子 lilydjwg » 2011-03-14 12:37

自由建客 写了:明白了,都是 for 惹得祸!item 是右值而非左值。
什么右值左值的。。。VimScript 又不是 C。这个 for in 嘛,从来都是这个样子的,想改变那个 list,用 map 吧。
头像
自由建客
论坛版主
帖子: 13436
注册时间: 2008-07-30 23:21
系统: Debian stable AMD64
来自: freebuilder@yeah.net
送出感谢: 12 次
接收感谢: 112 次
联系:

Re: index() 总是返回 -1

#4

帖子 自由建客 » 2011-03-14 12:42

lilydjwg 写了:
自由建客 写了:明白了,都是 for 惹得祸!item 是右值而非左值。
什么右值左值的。。。VimScript 又不是 C。这个 for in 嘛,从来都是这个样子的,想改变那个 list,用 map 吧。
在 while 中用 let s:slist[s:i]= 就可以改了,下标是左值,而 for 中的 item 引用是右值。
头像
lilydjwg
论坛版主
帖子: 4163
注册时间: 2009-04-11 23:46
系统: Arch Linux
送出感谢: 11 次
接收感谢: 127 次
联系:

Re: index() 总是返回 -1

#5

帖子 lilydjwg » 2011-03-14 12:52

自由建客 写了: 在 while 中用 let s:slist[s:i]= 就可以改了,下标是左值,而 for 中的 item 引用是右值。
用 map 不好吗,一行搞定,又快又好。
回复

回到 “Vim和Emacs”