vim - VIM 脚本 NERDTree-根据条件重新映射
问题描述
我正在寻找一种在某些条件下映射 NERDTree-<CR> 的方法。
如果当前窗口为空,则 NERDTree-<CR> 映射到 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}}
有什么方法可以让它们工作吗?
解决方案
检查给定缓冲区是否可修改通常通过检查缓冲区本地:help 'modifiable'
选项的值来完成:
function! IsBufferModifiable(numBuffer)
return getbufvar(a:numBuffer, '&modifiable')
endfunction
见:help getbufvar()
。
推荐阅读
- kotlin - flatmap 键列表和集合到对列表中
- python - Numpy:将矩阵行分配给另一个矩阵中的索引行的有效方法
- c# - 初始化字符串的格式不符合从索引 0.C 开始的规范
- sqlite - 子选择中的 Sqlite3 CASE 语句
- jenkins - 如何在课堂上使用詹金斯的内置方法?
- system-verilog - (vlog-2110) 非法引用网络“START”。“A” “B”
- django - Django:20 个 html 文件:需要 20 个模板视图和 20 个 URL 模式?
- android - 让 setVisibility 在片段中工作
- sharepoint - 如何从 Microsoft sharepoint 的子站点获取文件列表?
- html - 移动键盘会影响 CSS 媒体查询中的高度吗?