基本上我想做的是
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变量。我可以制作自己的变量吗?有没有更正确的方法呢?
答案 0 :(得分: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
调用ToggleEssayMode()
的映射可以位于同一文件中,也可以位于.vimrc
。
关于您的代码的一些评论:
let
分配变量(参见set
选项)。true
和false
;请改用1
和0
。if
都需要关闭endif
。umap
应为unmap
;前者不存在。nnoremap
以避免递归映射。:
是不必要的。答案 1 :(得分:1)
Nikita Kouevda的答案帮助我将其拼凑起来,但是我仍然需要仔细检查一些内容。为了后代,这再次是脚本:
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
s:
的{{1}}部分表明它是一个变量。如果您只是做s:enabled
,然后再做let enabled = 0
,它将在if enabled
上出错。
该函数需要以大写字母开头,由于某种原因,vim会强制执行。当我自定义功能时,遇到了这个要求。
要稍后调用您的函数,您需要使用if
。例如,:call
。
我只是将其放置在:call ToggleEssayMode()
中,而不是插件文件夹中。
最后一个提示:使用.vimrc
重新加载:so %
,而无需重新启动vim。可能会因已定义的内容而产生许多错误,但仍然可以正常工作。
答案 2 :(得分:0)