vim - 如何在函数内创建一个 if 属性以检查 vimscript 中的文件类型?
问题描述
我需要检查我在 Vim 中打开的文件类型,以便在函数中做一件事或另一件事。
这就是我的vimrc
样子:
function! MyFunction()
autocmd filetype typescript <C-V>%
autocmd filetype go <C-V>%
endfunction
nnoremap <Leadar>f :call MyFunction()<CR>
接下来<C-V>%
将是更多说明,但现在这是我正在测试的内容。
我的函数必须检测我有 openend 的文件,根据它的类型做一件事或另一件事。我在一个函数中执行此操作,因为在不久的将来我会将其移动到一个单独的插件中,但现在它是我的vimrc
文件。
我已经尝试过并且我知道它有效的另一件事是
autocmd filetype typescript nnoremap <Leader>f <C-V>% DoTypescriptThings
autocmd filetype go nnoremap <Leader>f <C-V>% DoGolangThings
如果我将这条线移到函数体之外,我会工作。但是<Leader> KEY
如果我把它做成一个插件,我就不能轻易改变。这就是为什么我把它移到一个函数中。
如何让我的函数检测我的类型以便我的函数工作?
解决方案
如果我能清楚地理解,您实际上想从自动命令中提取文件类型检查,以便重新映射主键 ( <LEADER>f
) 变得容易。
您可以使用&filetype
. 您的函数将如下所示:
function! MyFunction()
if &filetype ==# 'typescript'
autocmd filetype typescript <C-V>%
" Now you dont need autocmds here to be precise;
" But you may consider some other autocmd-events in future
" Until then a simple :execute or :execute "normal!..." should be sufficient instead
elseif &filetype ==# 'go'
autocmd filetype go <C-V>%
endif
endfunction
nnoremap <Leadar>f :call MyFunction()<CR>
现在考虑到 autocmd 也做同样的事情(检查文件类型和应用映射),所以我猜你的主要动机不是使用 autocmd,而是能够<LEADER>f
轻松地重新映射主键()。
因此,总而言之,我建议不要在此处使用 autocmd 并仅使用函数定义,以便一个键可以统治您的函数调用。(当然,除非您也决定使用其他一些 autocmd 事件)
推荐阅读
- intellij-idea - IntelliJ 声称可以构建但 jar 文件没有被触及
- vba - 不支持字节数据类型的 VBA for...下一个循环?
- node.js - Mongoose:我可以克隆一个 mongoose Schema 但对其进行修改吗?
- python - TensorFlow Extended data_accessor.tf_dataset_factory() 形状差异
- lit-element - 来自 Lit 中的 AsyncDirective 的 DispatchEvent
- rpc - 如何在不使用 Truffle 的情况下将智能合约部署到 RSK?
- python-3.x - Python锁定线程在示例中不起作用
- node.js - 使用猫鼬的 MongoDb 连接
- git - 使用 gitflow,如何确保所有合并到 master 中都经过全面测试?
- arrays - Rust:递归函数变异向量指南