在映射中编写脚本

sid*_*yll 1 vim

最近我创建了一个映射来切换高亮搜索.这很简单但非常有用,类似于nmap ,m :set hlsearch!.我遇到的唯一问题是,有时我会在按下后迷路,m.

"它有用吗?","它现在开启还是关闭?"......恐慌中没有收到反馈的常见问题:-)

所以我认为回应"开启"或"关闭"会让我更加平静.现在这个大问题已经到来了:是否有可能在映射中包含一个小脚本?我知道我可以创建一个函数,但这不是我对这个简单脚本的意图:

if (&hlsearch)
    echo "Search Highlight On"
else
    echo "Search Highlight Off"
endif
Run Code Online (Sandbox Code Playgroud)

我想我需要像预处理器指令一样"逃避"新行,也许:

nmap ,m :set hlsearch!              \
    if (&hlsearch)                  \
        echo "Search Highlight On"  \
    else                            \
        echo "Search Highlight Off" \
    endif
Run Code Online (Sandbox Code Playgroud)

但可能这不是正确的方法,不起作用,我甚至不知道是否可能.

我注意到的另一件事是打字之类的东西:if (1) echo "works"也不起作用,即使这两个ifecho的"冒号"的命令.它给出了一个错误echo.那么我需要以某种方式分离每个命令吗?在echo另一个冒号之前并没有解决问题.

谢谢你的帮助!

Luc*_*tte 5

无需if在此上下文中使用.三元运算符?:将会这样做.

nnoremap <silent> ,m :set hlsearch!<bar>echo "Search Highlight ".(&hlsearch?"On":"Off")<cr>
Run Code Online (Sandbox Code Playgroud)

而且,在这种特殊情况下,:set-?可能就足够了:

nnoremap <silent> ,m :set hlsearch!<bar>:set hlsearch?<cr>
Run Code Online (Sandbox Code Playgroud)