考虑到我们有当前数据:
ID NAME AGE
1 Joan 29
2 Peterson 16
3 Hunt 47
4 Wenche 12
5 Kennedy 29
6 Lottie 31
Run Code Online (Sandbox Code Playgroud)
光标在Nin 上NAME,我将如何选择文本,如果|是视觉块的分隔符,则选择应该是这样的
ID |NAME | AGE
1 |Joan | 29
2 |Peterson| 16
3 |Hunt | 47
4 |Wenche | 12
5 |Kennedy | 29
6 |Lottie | 31
Run Code Online (Sandbox Code Playgroud)
每个元素后面与宽度匹配的尾随空格Peterson不是必需的,但我需要一种快速的方法来突出显示当前块(如果存在)。
我知道您可以使用脚本本地函数来引用,<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 副本。
一个是用 macvim 安装的,必须配置为 -X11(与 Cocoa 一起使用),而另一个配置为 +X11(在终端中使用,与我使用的插件一起使用)
我希望所有 yanks 都转到系统剪贴板。启用 +X11 后,我可以在 .vimrc 中使用set clipboard=unnamedplus. 当 -X11 时,我可以使用set clipboard=unnamed.
我怎样才能有条件地在 .vimrc 中做到这一点?
就像是
if &x11
set clipboard=unnamedplus
else
set clipboard=unnamed
endif
Run Code Online (Sandbox Code Playgroud)
当然这不起作用,因为 &x11 不是真正的变量。
我目前正在尝试将一个函数结合在一起,根据当前文件路径执行某些操作,每当我使用autocmd BufEnter更改当前缓冲区时就会触发该函数
在我的 .vimrc 中
autocmd BufEnter * call SayLocation()
Run Code Online (Sandbox Code Playgroud)
在我的 .vimrc 中再往下看
fun SayLocation()
let str = expand("%p:~")
if str =~ "~/dir1"
echo "I am in dir 1!"
elseif str =~ "~/dir2"
echo "I am in dir 2!"
else
echo "I am somewhere else"
endif
endf
Run Code Online (Sandbox Code Playgroud)
但是,更改缓冲区会产生以下错误
第 3 行:
E33:没有先前的替代正则表达式
第 7 行:
E33:没有先前的替代正则表达式
我在其他地方
看来我运行子字符串比较器 =~ 错误。有什么线索吗?
我在我的 .vimrc 文件中编写了以下自定义命令:
command! -nargs=+ Sub :%s/<args>/g
Run Code Online (Sandbox Code Playgroud)
它允许我用一个词替换另一个词并执行如下:
:Sub <word>/<new word>
Run Code Online (Sandbox Code Playgroud)
我更喜欢用多个参数编写命令,如下所示:
:Sub <word> <new word>
Run Code Online (Sandbox Code Playgroud)
我可以重写命令以接受多个参数吗?
理想情况下,我想要这样的东西:
command! -nargs=+ Sub :%s/<arg1>/<arg2>/g
Run Code Online (Sandbox Code Playgroud)
先感谢您。
我想显示当前行所属的 C 函数。我不想使用任何插件,因为我在具有不同机器功能和配置的多个操作系统上工作。我已经尝试了大多数插件,但由于某种原因它不起作用。我必须写一些非常基本和最小的东西,并且可以使用非常基本的 vim 功能。
当前解决方案:
我从同事那里复制了一个 vim 函数,它本质上是搜索一个 reg-ex,匹配函数名的开头。它在底部屏幕上显示名称几秒钟然后消失
fun! ShowFuncName()
let lnum = line(".")
let col = col(".")
echohl ModeMsg
echo getline(search("^[^ \t#/]\\{2}.*[^:]\s*$", 'bW'))
echohl None
call search("\\%" . lnum . "l" . "\\%" . col . "c")
endfun
Run Code Online (Sandbox Code Playgroud)
问题
问题是这个东西不适用于标签。如果函数定义和当前行之间的一行中存在标签,脚本将显示标签名称而不是函数名称。
否则脚本会起作用,因为在我们的代码库中,始终从第 1 列开始函数定义并从第二行开始使用大括号是一个硬性规定。
建议修复
与其搜索正则表达式,不如使用 vim 移动键。即执行以下操作:
我不知道如何做上面提到的第 2 步。