最后更新于 .

最近博友在本博问了很多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设置上即可。

Pingbacks

Pingbacks已打开。

Trackbacks

引用地址

评论

  1. Jeffrey4l

    Jeffrey4l on #

    我也遇到问题2,同求解决办法。

    Reply

  2. 依云

    依云 on #

    问题3:
    :h last_buffer_nr()
    :h 'stl'

    如果不喜欢打 :ls,可尝试下 bufexplorer 插件。

    Reply

    1. Dante

      Dante on #

      太佩服依云对vim的熟悉啦,那我就帮忙把依云没有说完的话说出来吧:
      %{last_buffer_nr()}
      在statusline设置上即可。

      Reply

      1. 依云

        依云 on #

        呃,我只是 :h 了下而已。Vim 的文档系统很强大。我看到这个,只是想到了缓冲区号而已,于是 :h bufnr 就找到了 :-)

        PS: 文档上说 last_buffer_nr 已经废弃。并且,这样会把已经 :bwipeout 掉的缓冲区也算在内。

        Reply

        1. sw

          sw on #

          额,那个啥,文档里面不是说了bufnr('$')么……

          Reply

      2. zsyong2008

        zsyong2008 on #

        看到博主和各位朋友热情帮忙,,小弟我真是感激涕零。。。。

        试了下,last_buffer_nr()取得最新使用的缓冲区的编号,假如,我在使用过程中,,:bd 掉的任何一个或者几个,,这个编号不会变。。。。

        也许可以从列出的缓冲区(:ls)列表,,写一个函数进行实时统计当前开出的缓冲区总数(:bd掉的就没有了),不知道这个想法可行否。。

        小弟的情况是这样的,,如果不使用minibufpl跟分割窗口的话,,在打开多个文件后,,其实对其中开了几个缓冲区和开了哪些缓冲区没个底。。。。如果用minibufpl的话,就出现问题2.。。。其实小弟真正的目的就是想让各位大哥哥们在不忙的时候对问题2交流一下想法或者提供个解决方案,小弟谢谢了。。

        Reply

        1. sw

          sw on #

          对这个不是很明白的说,:bd以后不是当前窗口就关了么,如果屏幕上面只有buffer窗口,nerd_tree窗口和minibufexpl窗口的话,现在就应该只剩下nerd_tree窗口和minibufexpl窗口了啊,如果这个时候:bn的话,nerd_tree会被替换掉的吧?

          你的意思是不是在nerd_tree不停地go会导致minibufexpl上的条条越来越多?

          Reply

          1. zsyong2008

            zsyong2008 on #

            是这样的,我用nerd_tree打开文件后,就把nerd_tree 的窗口给隐藏了,,剩下的是minibufpl跟编辑文件的缓冲区了,,光标就会落在文件缓冲区上,,那用:bd,接着:bn就产生问题了。。关键一点:打开同一个文件夹(深度一样的)的文件再执行上面的操作却没有这个问题。。。

            还有一些个人经验就是:用nerd_tree打开文件,minibufpl也会产生多条tab,设置了
            let g:miniBufExplorerMoreThanOne=0
            就没有这问题了。。。

            Reply

            1. sw

              sw on #

              恕我愚昧……我还是没发现问题………………

              假设我有个文件e:\log.txt
              有个文件 e:\work\test.txt

              怎么操作才会出现问题呢?

              Reply

              1. zsyong2008

                zsyong2008 on #

                e:/work/index.php
                e:/work/action/admin.class.php
                e:/work/tpl/index.html

                如果这三个都打开了,,minibufpl里就有三个,然后:bd掉一个深路径的(出现问题2概率高),或者在这之后再用:bn,,一般情况,:bd步骤没问题的话在这个:bn问题就来了。。。

                打开不同目录的文件越多,越能看出问题。。。

                很抱歉,,当时陈述问题的时候,,没能全面的描述。。。

                Reply

                1. sw

                  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

                  1. zsyong2008

                    zsyong2008 on #

                    还麻烦朋友您帮我再试一下,,再建多几层文件夹,,每个文件夹建立多几个文件,然后全部文件都打开,,,再用:bd,删除一些,然后再用:bn。。。随机进行:bn,:bd操作,,操作多几次,,应该问题就来了。。

                    我的环境:gvim73,,Python27,nerd_tree,nimibufpl,tlist.主要就这些吧,,而且上面的这个问题不光是我出现,,上面的一位朋友也说有。。所以并不特殊。。。。

                    Reply

                    1. sw

                      sw on #

                      恩,我试试看。

                      Reply

                    2. sw

                      sw on #

                      额= =等等,我想起来了,我用的是minibufexplpp……不是minibufexpl………………不知道会不会是这个原因……

                      Reply

                      1. zsyong2008

                        zsyong2008 on #

                        我用的这个minibufexpl.vim。。vim.org没发现你的用的那个minibufexplpp。。

                        Reply

                      2. zsyong2008

                        zsyong2008 on #

                        找到了minibufexplpp。。用了下,,发现问题还是存在。。我们私下沟通下可以吗?

                        zsyong2008@126.com

                        Reply

        2. 依云

          依云 on #

          那个,想得到实际的缓冲区个数的话,可以利用 BufAdd 和 BufDelete 事件来自己计数的。

          Reply

          1. zsyong2008

            zsyong2008 on #

            按照依云兄提供的思路,改了下statusline这个插件,基本达到自己的需求了。。非常感谢各位朋友的帮忙。。

            Reply

  3. 七彩映像丶

    七彩映像丶 on #

    谢谢Dante了,我的问题修改了vimwiki的源代码已经解决了,麻烦了..

    Reply

    1. Dante

      Dante on #

      欢迎和大家分享,;)

      Reply

  4. 七彩映像丶

    七彩映像丶 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) &gt; 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

    1. Dante

      Dante on #

      已经帮你加到文章中啦~~ 能够自己摸索出答案的人都是有探索精神的人,呵呵~~

      Reply

  5. 七彩映像丶

    七彩映像丶 on #

    回复html标签转义了
    let st_tag .= '<del>[4]'
    let en_tag = '</del>'.a:en_tag

    Reply

    1. 七彩映像丶

      七彩映像丶 on #

      let st_tag .= '&lt;del&gt;[4]'
      let en_tag = '&lt;/del&gt;'.a:en_tag

      这条留言可以删除了.:)

      Reply

      1. Dante

        Dante on #

        哈,已经更改~

        Reply

        1. 梧桐

          梧桐 on #

          实际上回复时候加一个code标签就不会被转义了。。我每次都是这么做的

          Reply

          1. 梧桐

            梧桐 on #

            上面我那条删了吧,<code>标签根本没用。。&lt;悲剧&gt;

            Reply

  6. bronze casting

    bronze casting on #

    这些都是博友的问题啊,是不是全部在了

    Reply

  7. 铁骑

    铁骑 on #

    请问下博主的代码语法高亮插件用的是哪个啊?

    Reply

    1. Dante

      Dante on #

      wp_syntax

      Reply

  8. Joanna Wall

    Joanna Wall on #

    找到了minibufexplpp。。用了下,,发现问题还是存在。。我们私下沟通下可以吗? zsyong2008@126.com

    Reply

  9. impact wrench

    impact wrench on #

    问题还不少啊......

    Reply

  10. pwq

    pwq on #

    可以问您个问题吗?
    我的一个HTML文档内有多种文字,简繁中、日文、韩文,在网上搜索了不少办法,可编码配置还是一直搞不好,有乱码。能帮帮不。

    Reply

    1. Dante

      Dante on #

      如果是这种多语言的话,建议试一下Fencview这个插件,应该能满足你的需求。

      Reply

    2. pwq

      pwq on #

      谢谢,我试了下,没有效果,但还是感谢您的回复。支持一下。呵呵。

      Reply

  11. fanhe

    fanhe on #

    问题2困扰我一段时间了,没有好的办法,我个人是map了一个键,先切换至左边一个缓冲,然后删除原来的。vim的buffer管理本来就容易出现插件间兼容性问题,没办法。

    Reply

发表评论