gpt4 book ai didi

vimscript : Get visual mode selection text in mapping

转载 作者:行者123 更新时间:2023-12-03 20:39:23 25 4
gpt4 key购买 nike

所以我试图有一个运行 lvimgrep 的绑定(bind)。在当前选定的文本上。

  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"

该函数来自对问题的评论: How to get visually selected text in VimScript

事情是它的行为真的很奇怪:大多数时候函数返回的文本与视觉选择不匹配,而且通常是最后一个视觉选择的文本 - 而不是当前的。

已经阅读了大量关于在 vimscript 中获取视觉选择文本的帖子,但无法使其正常工作。

我也试过 https://stackoverflow.com/a/1534347/287085没有成功(将选择复制到注册) - 从我的绑定(bind)调用时出错。

最佳答案

问题是 '<,'>直到 才设置标记之后 当前选择已被保留(通过对其执行命令或通过 <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

关于vimscript : Get visual mode selection text in mapping,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17838700/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com