VIM - 如何为键分配不同的映射,具体取决于行是否为空?

ros*_*vid 2 vim keymapping macvim

我想根据上下文分配不同的命令.

我正在尝试做这样的事情:

if line is empty:
    map x key to y command
else
    map x key to z command
Run Code Online (Sandbox Code Playgroud)

ZyX*_*ZyX 8

通常通过<expr>映射来实现:

nnoremap <expr> ((empty(getline('.')))?('y'):('z'))

当你打算使用NerdCommenter时,你不得不使用"nore":

nmap <expr> empty(getline('.')) ? '' : '\cc'
Run Code Online (Sandbox Code Playgroud)

替换''为所需的代码,因为我不明白你的意思是"附加评论".


Pri*_*ash 5

更好的方法是使用单个函数,其行为取决于行的内容.然后你不必费心去做不同的映射.例如:

function! LineOperation()
    let curline=getline('.')
    if curline =~ '^\s*$'
        " empty line (except for whitespace): perform y command
    else
        " perform z command
    endif
endfunction
Run Code Online (Sandbox Code Playgroud)

然后映射所需的键以调用此函数:

nnoremap <silent> x :call LineOperation()<CR>
Run Code Online (Sandbox Code Playgroud)