如何在函数内部创建一个 if 语句来检查 vimscript 中的文件类型?
How to create a if estatement inside a function to check file type in 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,而只使用函数定义,这样一键就可以控制您的函数调用。 (当然,除非您决定也使用其他一些自动命令事件)
我需要检查我在 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,而只使用函数定义,这样一键就可以控制您的函数调用。 (当然,除非您决定也使用其他一些自动命令事件)