标签: viml

VimScript还是VimL?

Vim脚本语言的正确名称是什么?我认为它被称为VimScript,Vim脚本甚至VimL.

VimL甚至被列为GitHub上第10种最流行的编程语言!VimL名称背后的历史是什么?为什么Git人称之为VimL?

vim terminology viml

54
推荐指数
3
解决办法
2万
查看次数

vimscript调用与执行

在vimscript中,call和之间有什么区别execute?在什么情况下/用例我应该使用哪一个?

(免责声明,我知道vim中提供了广泛的在线帮助 - 我正在寻求对这个具体问题的简明回答).

vim viml

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

vimscript中的正则表达式

let test = 'a href="http://www.google.com">www.google.com</a;'
Run Code Online (Sandbox Code Playgroud)

在vimscript中,如何http://www.google.com使用正则表达式来解决这个问题,并将其存储在另一个变量中?

我似乎无法找到任何关于此的文档.

regex vim viml

16
推荐指数
1
解决办法
1万
查看次数

Vimscript:找到最后一个打开的括号或括号

我想在vimscript中编写一个函数,找到一行中最后一个打开的括号或括号.这不一定是一个简单的问题,因为它需要能够处理以下所有问题:

function(abc
function(abc, [def
function(abc, [def], "string("
function(abc, [def], "string(", ghi(
Run Code Online (Sandbox Code Playgroud)

如您所见,嵌套括号,不同符号和字符串标记都需要智能处理.这甚至可能吗?是否有使用vimscript正则表达式的工具来进行上下文感知搜索,这些搜索知道未闭合括号和字符串中的括号之间的区别?

鉴于您可以使用语法突出显示不平衡括号,应该可以在一行上找到最后一个未闭合的括号/括号.如何才能做到这一点?

vim viml

9
推荐指数
1
解决办法
2145
查看次数

Vimscript:列出的缓冲区数量

在我的vimscript中,我需要计算所有被认为列出/可列出的缓冲区(即所有没有未列出的'u'属性的缓冲区).

推导出这个值的推荐方法是什么?

vim viml

6
推荐指数
2
解决办法
1238
查看次数

在VimScript中解析日期

给定日期字符串为“ 2012-09-31”的形式,我想要一个vimscript函数对其进行解析,以便可以计算相对日期。欢迎使用纯vimscript或python解决方案。

vim viml

5
推荐指数
1
解决办法
543
查看次数

如何在Vim中发送转义序列?

因此,最近苹果公司已经支持在终端的状态栏中显示工作目录和文件。必须发送(设置当前文件)的转义序列是这样的:

ESC ] 6 ; Pt BEL
Run Code Online (Sandbox Code Playgroud)

其中Ptfile://网址指向当前正在编辑的文件。所以我想我可以让Vim以转义序列的形式发送此命令,但是我有点麻烦。到目前为止,我有:

au BufNewFile,BufReadPost,BufFilePost,BufWritePost * echo <escape sequence>
Run Code Online (Sandbox Code Playgroud)

但我有种感觉,它不会像那样工作。另外,file://尽管我怀疑netrw可能会帮助我,但我也不知道如何获取当前文件作为url。有任何想法吗?

编辑

到目前为止,我有这个:

au BufNewFile,BufReadPost,BufFilePost * echo printf('\e]6;file://%s%s\a', $HOSTNAME, expand('%:p'))
Run Code Online (Sandbox Code Playgroud)

但它仍然无法正常工作- $HOSTNAME没有得到扩展。任何人都对如何使其扩展有任何建议?

编辑2

好的,所以我对引号进行了一些更改并导出了$HOSTNAME,现在可以正常打印了。但是,vim ^[并没有像字面上那样呼出转义序列,而是像那样打印它们,这使它们毫无用处!所以这是我真正的问题:如何使vim将字面量转义序列发送到shell?

成功!

最终代码如下:

set title
set t_ts=^[]6;
set t_fs=^G
auto BufEnter * let &titlestring = "file://" . hostname() . expand("%:p")
Run Code Online (Sandbox Code Playgroud)

vim ansi-escape viml

5
推荐指数
1
解决办法
948
查看次数

如何为启用了“真彩色”的Vim设置透明背景?

我成功使用以下方法为Vim 启用了真彩色

set t_8f=\[[38;2;%lu;%lu;%lum
set t_8b=\[[48;2;%lu;%lu;%lum
set termguicolors
Run Code Online (Sandbox Code Playgroud)

(查看:h xterm-true-color更多信息)

然后,我启用了真彩色颜色方案以尝试新设置,例如:

set background=dark
colors deep-space
Run Code Online (Sandbox Code Playgroud)

https://github.com/tyrannicaltoucan/vim-deep-space

以前使用256色时,我可以通过以下方式获得透明背景:

hi! Normal ctermbg=NONE guibg=NONE
hi! NonText ctermbg=NONE guibg=NONE
Run Code Online (Sandbox Code Playgroud)

现在,这不再起作用了,我不知道有其他选择。在Vim下可以获取透明背景termguicolors吗?

更新

我已经在Vim的问题跟踪器上打开了一个问题:https : //github.com/vim/vim/issues/981

vim color-scheme vim-syntax-highlighting viml

5
推荐指数
0
解决办法
2350
查看次数

Vim:重新映射键以移至下一个非空白行(反之亦然)

我正在寻找一种重新映射键的方法,以将光标向下移动到下一行,跳过仅包含的任何行,\n而只在上一行下执行相同的操作。

本质上,我想做与{和}相反的动作。

vim viml

5
推荐指数
1
解决办法
410
查看次数

Vimscript打印功能?

Vimscript中是否有一个函数或允许您简单地将文本打印到编辑器的约定?该功能echo仅提供命令行打印功能,并不实际打印到编辑器.

vim function viml

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

如何检查Vim缓冲区是否可修改?

我发现Vim快捷方式nmap <enter> o<esc>或者nmap <enter> O<esc>用enter键插入一个空行非常有用.但是,它们会对插件造成严重破坏; 例如,ag.vim它使用要跳转到的文件名填充quickfix列表.在此窗口中按Enter键(应该跳转到文件)会给出错误E21: Cannot make changes; modifiable is off.

为了避免在quickfix缓冲区中应用映射,我可以这样做:

" insert blank lines with <enter>
function! NewlineWithEnter()
  if &buftype ==# 'quickfix'
    execute "normal! \<CR>"
  else
    execute "normal! O\<esc>"
  endif
endfunction
nnoremap <CR> :call NewlineWithEnter()<CR>
Run Code Online (Sandbox Code Playgroud)

这是有效的,但我真正想要的是避免任何不可修改的缓冲区中的映射,而不仅仅是在quickfix窗口中.例如,映射在位置列表中也没有意义(并且可能会破坏使用它的其他一些插件).如何检查我是否在可修改的缓冲区中?

vim macvim viml

4
推荐指数
2
解决办法
499
查看次数

基于if next行的不同命令是否为空

我正在尝试自动添加; 或者通过击键在表达结束时需要的任何内容,并转到另一行.

基本上它会是这样的inoremap <leader>; <C-o>A;,但我想要一点改进.如果下一行是空的(或不存在)我希望它做<C-o>A;<cr>,如果它不是空的<C-o>A;<Down>.换句话说,我需要一种惯用的方法来检查下一行是否存在以及它是否为空.谢谢.

vim viml

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