function - vim 中的切换功能

标签 function vim

基本上我想做的是

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

我环顾四周,但我能找到的人使用的是保留的 vim 变量。我可以创建自己的变量吗?有没有更正确的方法来做到这一点?

最佳答案

除非您使用单独的函数来启用和禁用,否则您将需要一个标志变量,为了将其与其他配置隔离,我建议编写一个小插件。例如,创建一个文件 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

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

关于您的代码的一些评论:
  • 使用 let为了分配变量(参见 set 选项)。
  • Vim 不支持 truefalse ;使用 10反而。
  • if需要关闭 endif .
  • umap应该是 unmap ;前者不存在。
  • nnoremap应该使用以避免递归映射。
  • :在脚本中的命令之前是不必要的。
  • 关于function - vim 中的切换功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20579142/

    相关文章:

    php - onClick 不适用于 'a' 元素

    javascript - 为什么我的 JavaScript 无法检测到移动设备?

    javascript - 使用 javascript 捕获表单中的信息

    vim - 重新分配vim缓冲区号

    Javascript:使用变量,或者如果未定义,则使用默认字符串

    javascript - 是否可以将参数传递给链式匿名函数回调?

    vim - 选择与冒号 ':' 不同的击键以在 vi 中进入命令行模式

    vim - 如何在Netrw中更改驱动器以及如何留在givm窗口但退出Netrw?

    vim - 将 <Shift>-Arrows 映射到选择字符/行

    vim - youcompleteme GoToDefinition 命令为 golang