VIM 脚本 NERDTree-<CR> 根据条件重新映射

问题描述

我正在寻找一种在某些条件下映射 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}}

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

解决方法

检查给定缓冲区是否可修改通常是通过检查缓冲区本地 import 'dart:io'; import 'package:firebase_storage/firebase_storage.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:image_picker/image_picker.dart'; import 'package:random_string/random_string.dart'; import 'package:tennis_event_app/services/crud.dart'; class CreateBlog extends StatefulWidget { @override _CreateBlogState createState() => _CreateBlogState(); } class _CreateBlogState extends State<CreateBlog> { late String pass,authorName,title,desc; File selectedImage; final picker = ImagePicker(); bool _isLoading = false; CrudMethods crudMethods = new CrudMethods(); Future getImage() async { final pickedFile = await picker.getImage(source: ImageSource.gallery); setState(() { if (pickedFile != null) { selectedImage = File(pickedFile.path); } else { print('No image selected.'); } }); } 选项的值来完成的:

:help 'modifiable'

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