【问题标题】:Vim - Use search register for find ( 'f', 't', 'F', 'T' ) commandsVim - 使用搜索寄存器查找('f','t','F','T')命令
【发布时间】:2019-04-26 17:01:45
【问题描述】:

在 Vim 中有查找命令 ('f', 't', 'F', 'T'),这些命令可以通过使用 ';' 来重复或者 ','。我希望能够通过使用“n”和“N”来重复这些命令。基本上就像我使用单词搜索('/')一样。

例如,当我输入 'fa' 时,我希望 vim 表现得像我执行了命令 '/a'。

我怎样才能做到这一点?

【问题讨论】:

  • 但是为什么不实际使用/a呢?当然,您可以将nN 重新映射为;,,或者将f 重新映射为/,但是为什么
  • 使用 f 对我来说更方便。 '/a' 是我的键盘布局上的 4 次击键(我住在欧洲),而 'fa' 只有 2 次,而且我也不必为此使用 shift 键(对于我的键盘布局),因此我的手可以不必移动。我会重新映射我的键,但是当你使用 find 命令时,'n' 和 'N' 不起作用,它们只有在你通过 '/' 实际搜索时才起作用。
  • 哎哟。为此,您需要nnoremap。有一些关于它的信息here(以及与其他映射命令的差异);如果您希望在正常模式和插入模式下使用不同的键盘布局,也可能值得研究 keymap 和相关选项(在键入俄语文本时为我节省了很多痛苦)。

标签: vim find command


【解决方案1】:

您可以通过在 vim 配置中添加以下内容来实现:

function! MyFind(c)
       execute "let @/ = '" . a:c . "'"
       return 'n'
endfunc

function! MyBackfind(c)
       execute "let @/ = '" . a:c . "'"
       return 'N'
endfunc

nnoremap <expr> f MyFind(nr2char(getchar()))
nnoremap <expr> F MyBackfind(nr2char(getchar()))

警告:

  • 不适用于t/T,不过可以实现,这个任务交给你了
  • 使用F,它会转到上一个出现的字母,但按n 仍然会前进,它将执行/ 搜索,而不是? 搜索(两者使用相同的寄存器和我还没有找到创建? 搜索的方法,同样,我把它留给你作为练习:-))

更多信息,请阅读:help &lt;expr&gt;

【讨论】:

    猜你喜欢
    • 2011-11-07
    • 1970-01-01
    • 2011-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-02
    • 2014-01-25
    • 2017-04-24
    相关资源
    最近更新 更多