vim:视觉明星搜索未按预期工作

2024-04-28

我复制了这个函数来进行视觉搜索* and #:

function! s:VSetSearch(cmdtype)
  let temp = @s
  norm! gv"sy
  let @/ = '\V' . substitute(escape(@s, a:cmdtype.'\'), '\n', '\\n', 'g')
  let @s = temp
endfunction

xnoremap * :<C-u>call <SID>VSetSearch('/')<CR>/<C-R>=@/<CR><CR>
xnoremap # :<C-u>call <SID>VSetSearch('?')<CR>?<C-R>=@/<CR><CR>

The #映射工作正常,但*映射不会退出视觉选择(它扩展视觉选择的范围,直到下一个搜索词)。我不明白为什么会发生这种情况。有解决办法吗?

EDIT:要重现问题,请保存代码片段,下载微软安装程序 ftp://ftp.vim.org/pub/vim/pc/gvim74.exe, open cmd.exe并启动 vimvim -u NONE, 然后做:set nocp最后获取保存的代码。事实上,下面的简单映射也不起作用:

nnoremap * *<C-o>

EDIT 2:其他人可以重现这个问题吗?是否应该报告?

EDIT 3:我相信问题(错误?)是*(星号)键无法重新映射:如果我用以下命令启动 vimvim -N -u NONE(Vim 7.4,带有补丁 1-274)并运行命令:noremap * :echo "star"<CR>并按*,vim 尝试执行搜索。我也举报了this https://groups.google.com/forum/#!topic/vim_dev/nkcV51bsQuc到 vim 开发组。


以下是我使用的:

function! s:Vword()
  return getline('.')[col("'<")-1:col("'>")-1]
endfunction

xnoremap <silent> * <Esc>/\v<<C-R>=<SID>Vword()<CR>><CR>
xnoremap <silent> g* <Esc>/\v<C-R>=<SID>Vword()<CR><CR>

xnoremap <silent> # o<Esc>?\v<<C-R>=<SID>Vword()<CR>><CR>
xnoremap <silent> g# o<Esc>?\v<C-R>=<SID>Vword()<CR><CR>

nnoremap <silent> g// :grep -w <cword> <C-R>=getcwd()<CR><CR>
nnoremap <silent> g/* :grep <cword> <C-R>=getcwd()<CR><CR>

xnoremap <silent> g// :<C-U>grep -w <C-R>=<SID>Vword()<CR> <C-R>=getcwd()<CR><CR>
xnoremap <silent> g/* :<C-U>grep <C-R>=<SID>Vword()<CR> <C-R>=getcwd()<CR><CR>

I have also additionally added nice mappings for g* & similarly g# and also a bunch of mappings for invoking grep that I find very useful.

编辑:对代码进行小修正。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vim:视觉明星搜索未按预期工作 的相关文章

  • 如何让 vim 很好地对齐三元 ?: 运算符?

    我喜欢使用三元 运算符编写代码 如下所示 std string result input empty createNewItem processInput input 我如何配置vim 以便在输入后按回车键createNewItem 缩进下
  • 如何在Vim中正确显示UTF-8字符

    我想要 需要编辑包含 UTF 8 字符的文件 并且我想使用 Vim 在我被指责问以前问过的问题之前 我已经阅读了有关编码 文件编码 s 术语编码等的 Vim 文档 用 google 搜索了该主题 并阅读这个问题 https stackove
  • 我可以在 VIM 或 Perl 中替换单个正则表达式中的多个项目吗?

    假设我有字符串 The Quick Brown Fox Jumps Over the Lazy Dog 我可以用一个正则表达式将其更改为 The Slow Brown Fox Jumps Over the Energy Dog 吗 目前 我
  • 如何在 IdeaVIM 中配置 Vim 的 Ctrl + N 和 Ctrl + P 补全?

    在Vim中我们可以使用Ctrl N or Ctrl P完成代码补全 如何在 IdeaVim for IntelliJ 中配置它 Alt and Alt Shift 既可以在普通 IntelliJ 中工作 也可以在安装了 IdeaVim 的情
  • 如何使用 system() 函数的第二个参数(输入)

    vim 的文档system函数对第二个参数是这样说的 当给出 input 时 该字符串将写入文件并作为标准输入传递给命令 我从中了解到的是 如果你system通话看起来像这样 call system node something js fi
  • Vim 重复点(“.”)命令缓冲区?

    我真的很喜欢 YankRing 的行为 它让我可以访问我最近完成的几件事y固定或d已删除或c不假思索地被吊死了 然而 这样的补充功能对于 重复命令 最常见的是当我键入我真正想重复的内容时 然后按x清理一些东西 通常 可以通过视觉模式拉动我刚
  • 如何在 VIm 和终端中始终拥有相同的当前目录?

    我希望我的终端当前目录跟随我的 VIM 目录 Example 在终端中 gt pwd gt Users rege gt vim 然后在VIM中 cd Users rege project
  • Vi/vim - 从末尾行删除,包括最后一个字符

    我想做类似这个问题的事情VI VIM 删除 更改从右到左 https stackoverflow com q 9154212 301527即从行尾删除到该行中 的最后一个实例 这可以使用dT 将光标放置在该行的末尾 然而 这个命令和其他这样
  • vim 使用外部文件上的行号突出显示行

    我有两个文本文件 一个是我当前正在工作的文件 另一个包含行号列表 我想做的是突出显示第一个文件中行号与后一个文件匹配的行 E g File1 I like eggs I like meat I don t like eggplant My
  • 如何在 Vim 中使 shift+空格键向上翻页?

    我的 vimrc 中有一个条目 当我按空格键时 它会在视口中向下翻页 它看起来像这样 map
  • VIM 分块插入

    我想在 VIM 中选定的文本块的开头插入一个哈希 Ruby 注释 我在可视模式下选择了线条 但如何对所有线条执行相同的操作 您有两个主要选择 在块视觉模式中选择 ctrl v 然后使用I沿着整个块的左侧插入相同的东西 相似地A追加 看分块运
  • 在 Vim 的 `autocmd` 命令中调用函数

    我想使用expand函数在一个autocmd 特别是 我正在改编tip https stackoverflow com questions 1240037 recommended build system for latex 1394702
  • 在 Vim 中移至当前单词的末尾

    通常我使用ea将某些内容附加到单词上 但是 如果光标已经位于单词的最后位置 则此方法不起作用 ea将使光标移动到末尾next word 我很想知道是否有任何移动到末尾的热键current即使光标已经位于单词的最后位置 也会显示单词 Than
  • Vim 和 Tmux 渲染错误

    我在使用 Tmux 和 Vim 时遇到问题 正如您在图片中看到的那样 当我使用 nerdtree 或 irssi 实际上是任何终端应用程序 时 我遇到了此类渲染问题 我输入的每个键都会修改整个终端渲染 这只是一个图形错误 但它使我无法正常工
  • 如何在 NERDTree 中显示隐藏文件(以句点开头)?

    我怎样才能使NERDTree https github com scrooloose nerdtree显示以 a 开头的文件 时期 我有一个名为 hgignore在项目目录中 如果我使用 NERDTree 浏览到该目录 该文件不会显示在树中
  • 如何从 Bash 命令行在后台 Vim 打开另一个文件?

    我正在从使用 Gvim 过渡到使用控制台 Vim 我在 Vim 中打开一个文件 然后暂停 Vim 在命令行上运行一些命令 然后想返回到 Vim Ctrl Z 在正常模式下 暂停 Vim 并返回到控制台 fg可用于将焦点返回到 Vim job
  • vim 中的 python 2 支持

    我正在尝试设置 YouCompleteMe 一个 vim 代码完成插件 当我运行 vim 时 它给我这个错误消息 YouCompleteMe unavailable 需要 python 2 x 我的 ubuntu 机器上安装了正确版本的 p
  • C# - 使用 Vim 作为主编辑器 [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我已经喝了酷乐了 Vim 优雅美丽 我必须学习如何使用它并配置它以拥有一个出色的编译器 这是最好的学习方式 问题是 我从哪里开始 是否有一个很好的教程
  • 代码折叠未保存在我的 vimrc 中

    我将以下代码添加到我的 vimrc 中 save and restore folds when a file is closed and re opened autocmd BufWinLeave mkview autocmd BufWin
  • 自定义 Vim HTML 语法

    我有一个脚本可以读取 HTML 文件并替换出现的 foo 具有 Perl 设置的值 像这样的东西 span class hi mom span 会在浏览器中产生类似这样的内容 span class classyclass Hello Wor

随机推荐