Vim脚本语言的正确名称是什么?我认为它被称为VimScript,Vim脚本甚至VimL.
VimL甚至被列为GitHub上第10种最流行的编程语言!VimL名称背后的历史是什么?为什么Git人称之为VimL?
在vimscript中,call和之间有什么区别execute?在什么情况下/用例我应该使用哪一个?
(免责声明,我知道vim中提供了广泛的在线帮助 - 我正在寻求对这个具体问题的简明回答).
let test = 'a href="http://www.google.com">www.google.com</a;'
Run Code Online (Sandbox Code Playgroud)
在vimscript中,如何http://www.google.com使用正则表达式来解决这个问题,并将其存储在另一个变量中?
我似乎无法找到任何关于此的文档.
我想在vimscript中编写一个函数,找到一行中最后一个打开的括号或括号.这不一定是一个简单的问题,因为它需要能够处理以下所有问题:
function(abc
function(abc, [def
function(abc, [def], "string("
function(abc, [def], "string(", ghi(
Run Code Online (Sandbox Code Playgroud)
如您所见,嵌套括号,不同符号和字符串标记都需要智能处理.这甚至可能吗?是否有使用vimscript正则表达式的工具来进行上下文感知搜索,这些搜索知道未闭合括号和字符串中的括号之间的区别?
鉴于您可以使用语法突出显示不平衡括号,应该可以在一行上找到最后一个未闭合的括号/括号.如何才能做到这一点?
在我的vimscript中,我需要计算所有被认为列出/可列出的缓冲区(即所有没有未列出的'u'属性的缓冲区).
推导出这个值的推荐方法是什么?
给定日期字符串为“ 2012-09-31”的形式,我想要一个vimscript函数对其进行解析,以便可以计算相对日期。欢迎使用纯vimscript或python解决方案。
因此,最近苹果公司已经支持在终端的状态栏中显示工作目录和文件。必须发送(设置当前文件)的转义序列是这样的:
ESC ] 6 ; Pt BEL
Run Code Online (Sandbox Code Playgroud)
其中Pt的file://网址指向当前正在编辑的文件。所以我想我可以让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没有得到扩展。任何人都对如何使其扩展有任何建议?
好的,所以我对引号进行了一些更改并导出了$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 启用了真彩色:
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
我正在寻找一种重新映射键的方法,以将光标向下移动到下一行,跳过仅包含的任何行,\n而只在上一行下执行相同的操作。
本质上,我想做与{和}相反的动作。
Vimscript中是否有一个函数或允许您简单地将文本打印到编辑器的约定?该功能echo仅提供命令行打印功能,并不实际打印到编辑器.
我发现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窗口中.例如,映射在位置列表中也没有意义(并且可能会破坏使用它的其他一些插件).如何检查我是否在可修改的缓冲区中?
我正在尝试自动添加; 或者通过击键在表达结束时需要的任何内容,并转到另一行.
基本上它会是这样的inoremap <leader>; <C-o>A;,但我想要一点改进.如果下一行是空的(或不存在)我希望它做<C-o>A;<cr>,如果它不是空的<C-o>A;<Down>.换句话说,我需要一种惯用的方法来检查下一行是否存在以及它是否为空.谢谢.