气泡提示框里中文乱码

Vim、Emacs配置和使用
回复
lh-n
帖子: 40
注册时间: 2009-02-23 15:52
送出感谢: 5 次
接收感谢: 0

气泡提示框里中文乱码

#1

帖子 lh-n » 2010-12-07 11:07

见附件,气泡提示框中汉字是乱码,我的是在windows下,别的地方没有乱码。

我还想知道,可否用光标触发弹出气泡,而不用鼠标。还有,如何触发弹出菜单(Pmenu)来显示list,如图中的。
附件
未命名.JPG
上次由 lh-n 在 2010-12-07 11:27,总共编辑 1 次。
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙
送出感谢: 4 次
接收感谢: 256 次

Re: 气泡提示框里中文乱码

#2

帖子 eexpress » 2010-12-07 11:10

附啥了
没气泡的。那是win
● 鸣学
lh-n
帖子: 40
注册时间: 2009-02-23 15:52
送出感谢: 5 次
接收感谢: 0

Re: 气泡提示框里中文乱码

#3

帖子 lh-n » 2010-12-07 11:28

eexpress 写了:附啥了
没气泡的。那是win
抱歉,忘贴附件了。有这个set balloonexpr= ,下面是我从网上复制修改的,就是图上的效果

代码: 全选

map <leader>sp :set spell!<CR>
function! FoldSpellBalloon()
	let foldStart = foldclosed(v:beval_lnum )
	let foldEnd   = foldclosedend(v:beval_lnum)
	let lines = []
	" Detect if we are in a fold
	if foldStart < 0
		" Detect if we are on a misspelled word
		let lines = spellsuggest( spellbadword(v:beval_text)[ 0 ], 5, 0 )
	else
		" we are in a fold
		let numLines = foldEnd - foldStart + 1
		" if we have too many lines in fold, show only the first 12
		" and the last 12 lines
		if ( numLines > 25 )
			let lines = getline( foldStart, foldStart + 12 )
			let lines += [ '-- Snipped ' . ( numLines - 24 ) . ' lines --' ]
			let lines += getline( foldEnd - 12, foldEnd )
		else
			"less than 25 lines, lets show all of them
			let lines = getline( foldStart, foldEnd )
		endif
	endif
	" return result
	return join( lines, has( "balloon_multiline" ) ? "\n" : " " )
endfunction

set balloonexpr=FoldSpellBalloon()
set ballooneval
set balloondelay=100
头像
lilydjwg
论坛版主
帖子: 4163
注册时间: 2009-04-11 23:46
系统: Arch Linux
送出感谢: 11 次
接收感谢: 127 次
联系:

Re: 气泡提示框里中文乱码

#4

帖子 lilydjwg » 2010-12-07 11:36

又是 Windows。。。。自己 :h :lang 研究吧。

光标不行吧,除非改源码。
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙
送出感谢: 4 次
接收感谢: 256 次

Re: 气泡提示框里中文乱码

#5

帖子 eexpress » 2010-12-07 11:36

这气泡哦。
你的源码,是啥编码的。
或者函数中转码。找找转码的例子。
● 鸣学
头像
leeaman
帖子: 30702
注册时间: 2007-02-02 18:14
系统: debian sid
送出感谢: 1 次
接收感谢: 23 次

Re: 气泡提示框里中文乱码

#6

帖子 leeaman » 2010-12-07 11:39

vim认识绯utf8编码,那个气泡不认识啊
醉了星星,醉月亮●●●●●The Long Way To Go(*^_^*)
lh-n
帖子: 40
注册时间: 2009-02-23 15:52
送出感谢: 5 次
接收感谢: 0

Re: 气泡提示框里中文乱码

#7

帖子 lh-n » 2010-12-07 18:35

回复上面几楼:
我的编码是cp939,但是我把文件转换为utf-8后还是乱码。
头像
呼文彪
帖子: 338
注册时间: 2009-03-13 20:31
来自: cnblogs.com/open_source
送出感谢: 2 次
接收感谢: 0

Re: 气泡提示框里中文乱码

#8

帖子 呼文彪 » 2010-12-08 14:15

你转换编码后有没有保存,有没有重新生成tags,最重要的是,你用的什么插件,分享下。 :em09

代码: 全选

'(("OS" . "Fedora")
  ("editor" . "Emacs"))
  ("blog" . "http://www.cnblogs.com/open_source")
lh-n
帖子: 40
注册时间: 2009-02-23 15:52
送出感谢: 5 次
接收感谢: 0

Re: 气泡提示框里中文乱码

#9

帖子 lh-n » 2011-01-10 22:33

问题终于解决了,getline得到了汉字是utf-8编码的,可视气泡只认识cp936

将最后得到的字符串用 iconv()转换一下就可以了。

代码: 全选

	let utf8 = join( lines, has( "balloon_multiline" ) ? "\n" : " " )
	return iconv(utf8, "utf-8", "cp936")
lh-n
帖子: 40
注册时间: 2009-02-23 15:52
送出感谢: 5 次
接收感谢: 0

Re: 气泡提示框里中文乱码

#10

帖子 lh-n » 2011-01-10 22:39

谢谢楼上几位。

呼文彪 写了:你转换编码后有没有保存,有没有重新生成tags,最重要的是,你用的什么插件,分享下。 :em09
这个气泡的实现没用用插件,只是从利用上面3楼的FoldSpellBalloon()函数赋值给balloonexpr就行了。
回复

回到 “Vim和Emacs”