我知道您可以使用脚本本地函数来引用,<SID>但是脚本本地变量呢?我尝试了以下操作,但命中<c-space>失败:
let s:testVar = "foo"
function! s:GetTestVar()
return s:testVar
endfunction
nnoremap <space> :echo <SID>GetTestVar()<cr>
nnoremap <c-space> :echo <SID>testVar<cr>
Run Code Online (Sandbox Code Playgroud)
您可以通过编写访问器函数(如上所述)来解决这个问题,但有时能够直接引用会很好。
出于某种原因,我一生都无法弄清楚在使用 vim 时如何将单引号传递给外部工具。例如,我可能想调用 Vim 的外部 grep 来搜索文本“foo”(即单引号然后是单词 foo)
所以我可能会尝试以下命令:
:grep \"foo *.txt
Run Code Online (Sandbox Code Playgroud)
但这会导致以下错误消息:
!findstr /n \"foo *.txt >C:\Users\[username]\AppData\Local\Temp\VIeC244.tmp 2>&1
shell returned 1
E40: Can't open errorfile C:\Users\[username]\AppData\Local\Temp\VIeC244.tmp
Run Code Online (Sandbox Code Playgroud)
请注意,grep 已更改为使用 'findstr /n',因为我在 Windows 上(并且可以通过运行来验证echo &grepprg)。我发现如果我自己从命令行输入以下内容,我可以轻松地执行我想要的搜索:
findstr /n \"foo *.txt
Run Code Online (Sandbox Code Playgroud)
这完全符合我的预期
我启用了相对编号,并且经常通过按 25k 或 7j 等导航到特定行。问题是,在更改行后,我经常发现自己想要返回到移动之前的位置。因此,我按 CTRL-O 但失败,因为 j/k 移动未添加到移动历史记录中。相反,我似乎向后退了两次。
理想的情况是,每当我使用乘数执行 aj/k 操作时,Vim 都会将其添加到移动历史记录中。这样的事情可能吗?
我喜欢使用 CTRL-O 和 CTRL-I 键来移动。问题是它很快就会被小动作填满,比如用 }/{ 逐段移动或用 )/( 逐句移动。有没有办法让这些键不影响导航历史?