在.vimrc中使用inline if运算符

gws*_*gws 3 vim

我试图在vim中实现绝对和可变行编号之间的切换,我想做一个单行而不是编写if函数.

我目前的代码是:

nnoremap <F4> :( &rnu == 1 ? "set nu" : "set rnu" )<CR>
Run Code Online (Sandbox Code Playgroud)

这不起作用; 谁知道我怎么能让它运作?

Ran*_*ris 6

这就是我要做到这一点的方法:

:nnoremap <f4> :setl <c-r>=&nu ? "rnu" : "nu"<cr><cr>
Run Code Online (Sandbox Code Playgroud)

对于未来的Google员工来说,较长的版本可能会更加清晰:

:nnoremap <f4> :setlocal <c-r>=&number ? "relativenumber" : "number"<cr><cr>
Run Code Online (Sandbox Code Playgroud)

<C-r>=告诉Vim使用表达式寄存器评估该行,VIM命令的其余部分.尾部双精度<cr>是必需的,因为第一个用于计算表达式,第二个用于执行:setlocal命令.

  • 更新:`'number'` 和 `'relativenumber'` 的行为在 Vim 7.3.1115 中已经改变。切换现在的工作方式略有不同,请参阅我在 http://superuser.com/a/604625 上的回答。 (2认同)