气泡提示框里中文乱码
-
- 帖子: 40
- 注册时间: 2009-02-23 15:52
气泡提示框里中文乱码
见附件,气泡提示框中汉字是乱码,我的是在windows下,别的地方没有乱码。
我还想知道,可否用光标触发弹出气泡,而不用鼠标。还有,如何触发弹出菜单(Pmenu)来显示list,如图中的。
我还想知道,可否用光标触发弹出气泡,而不用鼠标。还有,如何触发弹出菜单(Pmenu)来显示list,如图中的。
上次由 lh-n 在 2010-12-07 11:27,总共编辑 1 次。
- eexpress
- 帖子: 58428
- 注册时间: 2005-08-14 21:55
- 来自: 长沙
-
- 帖子: 40
- 注册时间: 2009-02-23 15:52
Re: 气泡提示框里中文乱码
抱歉,忘贴附件了。有这个set balloonexpr= ,下面是我从网上复制修改的,就是图上的效果eexpress 写了:附啥了
没气泡的。那是win
代码: 全选
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
- 论坛版主
- 帖子: 4258
- 注册时间: 2009-04-11 23:46
- 系统: Arch Linux
- 联系:
Re: 气泡提示框里中文乱码
又是 Windows。。。。自己 :h :lang 研究吧。
光标不行吧,除非改源码。
光标不行吧,除非改源码。
- eexpress
- 帖子: 58428
- 注册时间: 2005-08-14 21:55
- 来自: 长沙
- leeaman
- 帖子: 30702
- 注册时间: 2007-02-02 18:14
- 系统: debian sid
-
- 帖子: 40
- 注册时间: 2009-02-23 15:52
Re: 气泡提示框里中文乱码
回复上面几楼:
我的编码是cp939,但是我把文件转换为utf-8后还是乱码。
我的编码是cp939,但是我把文件转换为utf-8后还是乱码。
- 呼文彪
- 帖子: 338
- 注册时间: 2009-03-13 20:31
- 来自: cnblogs.com/open_source
Re: 气泡提示框里中文乱码
你转换编码后有没有保存,有没有重新生成tags,最重要的是,你用的什么插件,分享下。 

代码: 全选
'(("OS" . "Fedora")
("editor" . "Emacs"))
("blog" . "http://www.cnblogs.com/open_source")
-
- 帖子: 40
- 注册时间: 2009-02-23 15:52
Re: 气泡提示框里中文乱码
问题终于解决了,getline得到了汉字是utf-8编码的,可视气泡只认识cp936
将最后得到的字符串用 iconv()转换一下就可以了。
将最后得到的字符串用 iconv()转换一下就可以了。
代码: 全选
let utf8 = join( lines, has( "balloon_multiline" ) ? "\n" : " " )
return iconv(utf8, "utf-8", "cp936")
-
- 帖子: 40
- 注册时间: 2009-02-23 15:52
Re: 气泡提示框里中文乱码
谢谢楼上几位。
这个气泡的实现没用用插件,只是从利用上面3楼的FoldSpellBalloon()函数赋值给balloonexpr就行了。呼文彪 写了:你转换编码后有没有保存,有没有重新生成tags,最重要的是,你用的什么插件,分享下。