【问题标题】:VIM script NERDTree-<CR> remapping on conditionVIM 脚本 NERDTree-<CR> 根据条件重新映射
【发布时间】:2021-06-19 01:56:34
【问题描述】:

我正在寻找一种在某些条件下映射 NERDTree- 的方法。
如果当前窗口为空,则 NERDTree- 映射到 NERDTree-o。如果不是,映射到NERDTree-t。

我是 vimscript 的初学者,所以很难找到如何去做。
我试图制作一个如下所示的函数以及要在“NERDTreeCustomArgsOpen”上调用的函数,但无法实现。

" Couldn't make 'IsBufferModifiable' function
" and mapping 'MyNERDTree_CR' to 'NERDTreeCustomOpenArgs'

function! IsBufferModifiable(numBuffer)

function! IsBufferEmpty(numBuffer)
  return bufname(a:numBuffer) == ''
endfunction

function! IsModifiableBufferEmpty()
  let emptyModifiableBuffers = filter(range(1, bufnr('$')), 'IsBufferModifiable(v:val) && IsBufferEmpty(v:val)')

  if len(emptyModifiableBuffers) == 0
    return 1
  else
    return 0
endfunction

function! MyNERDTree_CR()
  if IsModifiableBufferEmpty()
    call feedkeys('o')
  else
    call feedkeys('t')
endfunction

" Not sure it works or not
let NERDTreeCustomOpenArgs = {'file':{'where':'MyNERDTree_CR', 'reuse':'all', 'keepopen':1, 'stay':1}}

有什么方法可以让它们工作吗?

【问题讨论】:

  • 我不确定这是否是有意的,但IsBufferModifiable() 没有正文,也没有关闭endfunction
  • @romainl 是的,你是对的。我把它留空了,因为我无法完成它,正如我在顶部的评论中所说的那样

标签: vim vim-plugin nerdtree


【解决方案1】:

检查给定缓冲区是否可修改通常通过检查缓冲区本地 :help 'modifiable' 选项的值来完成:

function! IsBufferModifiable(numBuffer)
    return getbufvar(a:numBuffer, '&modifiable')
endfunction

:help getbufvar()

【讨论】:

    猜你喜欢
    • 2013-01-15
    • 2011-07-20
    • 1970-01-01
    • 1970-01-01
    • 2011-06-09
    • 1970-01-01
    • 2014-12-30
    • 1970-01-01
    • 2014-06-02
    相关资源
    最近更新 更多