在vim中切换功能

Pon*_*are 4 vim function

基本上我想做的是

map ,e :call ToggleEssayMode()<CR>
function! ToggleEssayMode()
if toggle==true
  :map j gj
  :map k gk
  toggle=false
else
  :umap j
  :umap k
  toggle=true
enndfunction
Run Code Online (Sandbox Code Playgroud)

我环顾了一会儿,但我能找到的人都是保留的vim变量.我可以制作自己的变量吗?有没有更正确的方法呢?

Nik*_*vda 6

除非您使用单独的函数来启用和禁用,否则您将需要一个标志变量,并且为了将其与其他配置隔离,我建议您编写一个小插件.例如,使用以下内容创建一个文件essay.vim(实际名称无关,只要它结束.vim)~/.vim/plugin/:

let s:enabled = 0

function! ToggleEssayMode()
    if s:enabled
        unmap j
        unmap k
        let s:enabled = 0
    else
        nnoremap j gj
        nnoremap k gk
        let s:enabled = 1
    endif
endfunction
Run Code Online (Sandbox Code Playgroud)

然后,调用映射ToggleEssayMode()可以在同一个文件中或在您的文件中.vimrc.

关于你的代码的一些评论:

  • 使用let以分配变量(参见set为选项).
  • Vim不支持truefalse; 使用10来代替.
  • 每个人都if需要关闭endif.
  • umap应该是unmap; 前者不存在.
  • nnoremap 应该使用以避免递归映射.
  • : 在脚本中的命令之前是不必要的