Vim:如何在激活的搜索模式下立即更改设置“ iminsert”和“ imsearch”?

时间:2019-03-15 00:28:52

标签: vim

我正在尝试配置

nmap <C-F2> :set iminsert=1 imsearch=1<cr>
imap <C-F2> <C-O><C-F2>

以更改vim语言。它在命令和插入模式下效果很好。 但这在搜索模式下不起作用。 为了实现它,我写了一个函数

function! Call_F2()
    set iminsert=1
    set imsearch=1
    return ""
endfunction

并使用a

进行映射
cmap <C-F2> <C-R>=Call_F2()<cr>

所以我键入/并按C-F2,但是设置不适用于当前的搜索模式。现在,我必须退出并重新进入搜索模式才能看到应用的更改。

问题是:如何在激活的搜索模式下立即更改设置“ iminsert”和“ imsearch”?

(我知道我可以使用快捷键C- ^,它可以工作,但是我想将语言映射到他们自己的快捷键)

2 个答案:

答案 0 :(得分:1)

我无法像您一样使用<C-F2>(不确定原因),但是使用<F2>可以起作用:

:cmap <F2> <esc>:set iminsert=1 imsearch=1<cr>/<up>

限制:以<up>结尾,它避免了在我按<F2>时清除当前搜索行,但是如果当前搜索行为空,则会带回前一条,并且如果该搜索是查找不存在的字符串。

我不确定如何检测搜索行的当前状态是否为空,因为我从<esc>开始,它已退出搜索模式以进行更改。

当在文本中找不到当前搜索字符串时,它的行为也很差,使您退出搜索模式,因为它找不到该字符串。

总而言之,这种解决方案并不是很好,但是我还是想发布它,因为它可能会成为开发更好解决方案的灵感。

答案 1 :(得分:1)

非常感谢Joanis!我已经改善了她/他的解决方案:

const login = async (userId, password) => {
  // ...
  if (response.status === 201) {
    // ...
    await refresh(token);
  }
};

const refresh = async refreshToken => {
  const response = await fetch(refreshUrl, {
    method: "POST",
    mode: "cors",
    headers: {
      "Content-Type": "application/json",
      Authorization: `JWT ${refreshToken}`
    }
  });

  // ...
};

我注意到的唯一副作用:光标总是跳到搜索模式的末尾。