最近博友在本博问了很多Vim相关的问题,我已经渐渐感觉到仅凭我一个人即使对vim再怎么精通都是无法回答这所有的问题的,所以在这里把问题列出来,希望知道的朋友能够帮忙解答。 对于这种博友互助,我也在考虑有没有更好的方式,如果大家有什么好的建议或意见都可以跟我提出来,我们一起想更好的方法。 1.By 七彩映像丶 在使用vimwiki的时候遇到一个问题,再次请教你一下. 在新建事项:
* [3] 切换列表项开/关 * [0] 简单的在 [ ] 和 [X] 之间切换. * [4] 所有的列表子项将被适当的切换为开/关. * [4] 仅当当前行是列表项时,切换子项. * [4] 父列表项将受子列表项的切换影响.
生成HTML文件时会自动加上checkbox,却不会显示该事项的进度,虽然我设置了let g:vimwiki_listsyms="01234",问题依旧存在. 我想生成如org-mode效果:
[66%] 新事项
[X] 该事项已完成
[X] 同上
[] 同上
[ ] 未完成
应该怎么设置呢?还是vimwiki不支持该方式生成事项进度? A:作者自己找到了解决方案,并与大家分享(赞一个!) /vimfiles/autoload/vimwiki_html.vim LINE:751 修改为
function! s:add_checkbox(line, rx_list, st_tag, en_tag)
let st_tag = a:st_tag
let en_tag = a:en_tag
let chk = matchlist(a:line, a:rx_list)
if len(chk) > 0
if chk[1] == g:vimwiki_listsyms[4]
let st_tag .= '<del>[4]'
let en_tag = '</del>'.a:en_tag
elseif chk[1] == g:vimwiki_listsyms[0]
let st_tag .= '[0]'
elseif chk[1] == g:vimwiki_listsyms[3]
let st_tag .= '[3]'
elseif chk[1] == g:vimwiki_listsyms[2]
let st_tag .= '[2]'
else
let st_tag .= '[1]'
endif
endif
return [st_tag, en_tag]
endfunction
2.By zsyong2008 minibufexpl配合nerd_tree打开文件(深度不一样)后,minibufexpl产生一个文件列表tab,如果用:bd删除某一个缓冲区后,再用:bn切换到下一缓冲区,常常会出现第二条文件列表tab…如此下去,,会有第三条,,第四条。。。。窗口极其的混乱,,深感烦恼,,请博主提供些解决方案。。。
3.By zsyong2008 如果在状态栏上输出共有几个缓冲区及当前缓冲区的文件路径( 虽然在标题栏上有,但不习惯看那),而且有点不喜欢分割窗口,也懒得打:ls等命令,本人基础没打好,,还请博主帮忙。。或者提供一个更好解决方案。。谢谢 A:感谢依云的回答 %{last_buffer_nr()} 在statusline设置上即可。
Jeffrey4l on #
我也遇到问题2,同求解决办法。
Reply
依云 on #
问题3:
:h last_buffer_nr()
:h 'stl'
如果不喜欢打 :ls,可尝试下 bufexplorer 插件。
Reply
Dante on #
太佩服依云对vim的熟悉啦,那我就帮忙把依云没有说完的话说出来吧:
%{last_buffer_nr()}
在statusline设置上即可。
Reply
依云 on #
呃,我只是 :h 了下而已。Vim 的文档系统很强大。我看到这个,只是想到了缓冲区号而已,于是 :h bufnr 就找到了 :-)
PS: 文档上说 last_buffer_nr 已经废弃。并且,这样会把已经 :bwipeout 掉的缓冲区也算在内。
Reply
sw on #
额,那个啥,文档里面不是说了bufnr('$')么……
Reply
zsyong2008 on #
看到博主和各位朋友热情帮忙,,小弟我真是感激涕零。。。。
试了下,last_buffer_nr()取得最新使用的缓冲区的编号,假如,我在使用过程中,,:bd 掉的任何一个或者几个,,这个编号不会变。。。。
也许可以从列出的缓冲区(:ls)列表,,写一个函数进行实时统计当前开出的缓冲区总数(:bd掉的就没有了),不知道这个想法可行否。。
小弟的情况是这样的,,如果不使用minibufpl跟分割窗口的话,,在打开多个文件后,,其实对其中开了几个缓冲区和开了哪些缓冲区没个底。。。。如果用minibufpl的话,就出现问题2.。。。其实小弟真正的目的就是想让各位大哥哥们在不忙的时候对问题2交流一下想法或者提供个解决方案,小弟谢谢了。。
Reply
sw on #
对这个不是很明白的说,:bd以后不是当前窗口就关了么,如果屏幕上面只有buffer窗口,nerd_tree窗口和minibufexpl窗口的话,现在就应该只剩下nerd_tree窗口和minibufexpl窗口了啊,如果这个时候:bn的话,nerd_tree会被替换掉的吧?
你的意思是不是在nerd_tree不停地go会导致minibufexpl上的条条越来越多?
Reply
zsyong2008 on #
是这样的,我用nerd_tree打开文件后,就把nerd_tree 的窗口给隐藏了,,剩下的是minibufpl跟编辑文件的缓冲区了,,光标就会落在文件缓冲区上,,那用:bd,接着:bn就产生问题了。。关键一点:打开同一个文件夹(深度一样的)的文件再执行上面的操作却没有这个问题。。。
还有一些个人经验就是:用nerd_tree打开文件,minibufpl也会产生多条tab,设置了
let g:miniBufExplorerMoreThanOne=0
就没有这问题了。。。
Reply
sw on #
恕我愚昧……我还是没发现问题………………
假设我有个文件e:\log.txt
有个文件 e:\work\test.txt
怎么操作才会出现问题呢?
Reply
zsyong2008 on #
e:/work/index.php
e:/work/action/admin.class.php
e:/work/tpl/index.html
如果这三个都打开了,,minibufpl里就有三个,然后:bd掉一个深路径的(出现问题2概率高),或者在这之后再用:bn,,一般情况,:bd步骤没问题的话在这个:bn问题就来了。。。
打开不同目录的文件越多,越能看出问题。。。
很抱歉,,当时陈述问题的时候,,没能全面的描述。。。
Reply
sw on #
我还是没发现问题。步骤如下:
1. :NERDTree 打开nerd-tree
2. 选择 work\index.php, 使用go打开
3. 同2,打开剩下两个文件。
4. 使用:q关掉NERDTree
5. 使用:bd关掉当前文件(是work\tpl\index)这一步没有任何异常。
6. 使用:bn切换下个缓冲区。这一步还是没有任何异常。
我用的版本是gVim7.3-87,大型图形版本,带python,python3,perl,ruby,lua,scheme。
Reply
zsyong2008 on #
还麻烦朋友您帮我再试一下,,再建多几层文件夹,,每个文件夹建立多几个文件,然后全部文件都打开,,,再用:bd,删除一些,然后再用:bn。。。随机进行:bn,:bd操作,,操作多几次,,应该问题就来了。。
我的环境:gvim73,,Python27,nerd_tree,nimibufpl,tlist.主要就这些吧,,而且上面的这个问题不光是我出现,,上面的一位朋友也说有。。所以并不特殊。。。。
Reply
sw on #
恩,我试试看。
Reply
sw on #
额= =等等,我想起来了,我用的是minibufexplpp……不是minibufexpl………………不知道会不会是这个原因……
Reply
zsyong2008 on #
我用的这个minibufexpl.vim。。vim.org没发现你的用的那个minibufexplpp。。
Reply
zsyong2008 on #
找到了minibufexplpp。。用了下,,发现问题还是存在。。我们私下沟通下可以吗?
zsyong2008@126.com
Reply
依云 on #
那个,想得到实际的缓冲区个数的话,可以利用 BufAdd 和 BufDelete 事件来自己计数的。
Reply
zsyong2008 on #
按照依云兄提供的思路,改了下statusline这个插件,基本达到自己的需求了。。非常感谢各位朋友的帮忙。。
Reply
七彩映像丶 on #
谢谢Dante了,我的问题修改了vimwiki的源代码已经解决了,麻烦了..
Reply
Dante on #
欢迎和大家分享,;)
Reply
七彩映像丶 on #
/vimfiles/autoload/vimwiki_html.vim LINE:751
修改为
function! s:add_checkbox(line, rx_list, st_tag, en_tag) "{{{
let st_tag = a:st_tag
let en_tag = a:en_tag
let chk = matchlist(a:line, a:rx_list)
if len(chk) > 0
if chk[1] == g:vimwiki_listsyms[4]
let st_tag .= '<del>[4]'
let en_tag = '</del>'.a:en_tag
elseif chk[1] == g:vimwiki_listsyms[0]
let st_tag .= '[0]'
elseif chk[1] == g:vimwiki_listsyms[3]
let st_tag .= '[3]'
elseif chk[1] == g:vimwiki_listsyms[2]
let st_tag .= '[2]'
else
let st_tag .= '[1]'
endif
endif
return [st_tag, en_tag]
endfunction "}}}
我改为0-4代码进度,百分号不容易对齐,呵呵
Reply
Dante on #
已经帮你加到文章中啦~~ 能够自己摸索出答案的人都是有探索精神的人,呵呵~~
Reply
七彩映像丶 on #
回复html标签转义了
let st_tag .= '<del>[4]'
let en_tag = '</del>'.a:en_tag
Reply
七彩映像丶 on #
let st_tag .= '<del>[4]'
let en_tag = '</del>'.a:en_tag
这条留言可以删除了.:)
Reply
Dante on #
哈,已经更改~
Reply
梧桐 on #
实际上回复时候加一个code标签就不会被转义了。。我每次都是这么做的
Reply
梧桐 on #
上面我那条删了吧,<code>标签根本没用。。<悲剧>
Reply
bronze casting on #
这些都是博友的问题啊,是不是全部在了
Reply
铁骑 on #
请问下博主的代码语法高亮插件用的是哪个啊?
Reply
Dante on #
wp_syntax
Reply
Joanna Wall on #
找到了minibufexplpp。。用了下,,发现问题还是存在。。我们私下沟通下可以吗? zsyong2008@126.com
Reply
impact wrench on #
问题还不少啊......
Reply
pwq on #
可以问您个问题吗?
我的一个HTML文档内有多种文字,简繁中、日文、韩文,在网上搜索了不少办法,可编码配置还是一直搞不好,有乱码。能帮帮不。
Reply
Dante on #
如果是这种多语言的话,建议试一下Fencview这个插件,应该能满足你的需求。
Reply
pwq on #
谢谢,我试了下,没有效果,但还是感谢您的回复。支持一下。呵呵。
Reply
fanhe on #
问题2困扰我一段时间了,没有好的办法,我个人是map了一个键,先切换至左边一个缓冲,然后删除原来的。vim的buffer管理本来就容易出现插件间兼容性问题,没办法。
Reply