vimscript:在映射中获取可视模式选择文本

拉古

因此,我试图lvimgrep在当前选定的文本上运行绑定

  fun! s:get_visual_selection()
       let l=getline("'<")
       let [line1,col1] = getpos("'<")[1:2]
       let [line2,col2] = getpos("'>")[1:2]
       return l[col1 - 1: col2 - 1]
 endfun

 vnoremap <expr> <script><leader>* ":lvimgrep /" .  <SID>get_visual_selection()  . "/j **/*." .  expand("%:e") . " \|lopen"

该函数来自对以下问题的评论:如何在VimScript中获得可视选择的文本

问题在于它的行为确实很奇怪:大多数情况下,该函数返回的文本与视觉选择不匹配,而且通常是最后一个视觉选择的文本,而不是当前的视觉选择。

在vimscript中获取视觉选择文本时,已经经历了无数篇文章,但是却无法使其正常工作。

我还尝试了https://stackoverflow.com/a/1534347/287085,但没有成功(将选择复制到注册中)-从绑定中调用时出现错误。

英戈·卡卡特(Ingo Karkat)

问题在于,'<,'>直到留下当前选择之后(通过在其上执行命令或通过<Esc>才设置标记在这里,您的表达式映射使先添加一个<Esc>离开可视模式变得更加复杂,因此使用:help i_CTRL-R和表达式寄存器插入表达式更加容易=

:vnoremap <script> <leader>* <Esc>:lvimgrep /<C-R><C-R>=<SID>get_visual_selection()<CR>/j **/*.<C-R><C-R>=expand("%:e")<CR>\|lopen

如果你不介意重挫默认的寄存器,你也可以只抽出的选择:

:vnoremap <leader>* y:lvimgrep /<C-R><C-R>"/j **/*.<C-R><C-R>=expand("%:e")<CR>\|lopen

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Hibernate映射中的SAXParseException

来自分类Dev

如何在Vimscript的映射中转义“ <CR>”

来自分类Dev

vim映射中文本对象拉动的序列

来自分类Dev

从Clojure映射中的动态键获取价值

来自分类Dev

VIM:可视线模式的映射

来自分类Dev

如何从源映射中获取原始行号和符号

来自分类Dev

在键映射中的Vimgrep中使用多个模式

来自分类Dev

SQLAlchemy不仅通过主键从身份映射中获取项目

来自分类Dev

映射中的<cr> =与<expr>

来自分类Dev

Matlab内存映射中的高效字节模式搜索

来自分类Dev

用OR运算符和可视模式选择的文本用多种模式替换Vim

来自分类Dev

从Sass映射中获取数字而不是字符串

来自分类Dev

如何从Hive映射中获取仅键列表

来自分类Dev

根据映射键从接口映射中选择类型

来自分类Dev

您如何重用可视模式选择?

来自分类Dev

gvim在可视模式下将键映射到ex命令?

来自分类Dev

在可视块模式下替换文本

来自分类Dev

从Clojure映射中的动态键获取价值

来自分类Dev

VIM:可视线模式的映射

来自分类Dev

在前缀键盘映射中为特定模式定义密钥

来自分类Dev

Vim可视模式文本格式

来自分类Dev

进程内存映射中的文本部分

来自分类Dev

如何从Maven项目中的资源映射中获取文件

来自分类Dev

获取等于(如果映射中存在密钥)的键或严格小于映射中给定输入的键

来自分类Dev

不可变 JS - 在嵌套映射中获取值

来自分类Dev

从数组映射中的对象获取属性

来自分类Dev

模式匹配函数头中映射中的映射

来自分类Dev

如何在类映射中获取子类

来自分类Dev

如何从响应映射中获取特定键