标签: vimscript

Vim 可视模式:选择光标下的当前块

考虑到我们有当前数据:

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不是必需的,但我需要一种快速的方法来突出显示当前块(如果存在)。

vim vimscript

7
推荐指数
1
解决办法
867
查看次数

Vim 脚本:是否可以在映射中引用脚本局部变量?

我知道您可以使用脚本本地函数来引用,<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 gvim vimscript

5
推荐指数
2
解决办法
1663
查看次数

检查 vim 是否在 .vimrc 中使用 +X11 编译

我安装了两个 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 不是真正的变量。

vim macvim vimscript

4
推荐指数
1
解决办法
359
查看次数

Vimscript:检查子字符串时出错

我目前正在尝试将一个函数结合在一起,根据当前文件路径执行某些操作,每当我使用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:没有先前的替代正则表达式
我在其他地方


看来我运行子字符串比较器 =~ 错误。有什么线索吗?

vim gvim vimscript

3
推荐指数
1
解决办法
8104
查看次数

Vim - 我可以在不编写函数的情况下将多个参数传递给自定义命令吗

我在我的 .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)

先感谢您。

linux bash vim command-line vimscript

3
推荐指数
1
解决办法
3668
查看次数

vim 函数内的移动命令

我想显示当前行所属的 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 移动键。即执行以下操作:

  1. 存储当前行#、列#
  2. 使用移动键 '[[' 跳转到函数定义
  3. 正上方的行将具有 C 函数。(这是在编码指南中严格执行的)
  4. 打印行
  5. 跳转到第 #1 步中存储的第 # 行、第 # 列。

我不知道如何做上面提到的第 2 步。

vim code vimscript

2
推荐指数
1
解决办法
1930
查看次数

标签 统计

vim ×6

vimscript ×6

gvim ×2

bash ×1

code ×1

command-line ×1

linux ×1

macvim ×1