Archive

Archive for May, 2018

VimScript 五分钟入门(翻译)

May 26th, 2018 No comments

译注:折腾 Vim 当然要能看懂和改写相关脚本,而中文资料匮乏,缺一个提纲挈领的教程。本文翻译自 Andrew Scala 的 《Five Minute Vimscript》,立足于让你用最短的时间掌握 VimScript 的基础和要点,你可以把它看成一份语言速查表。

Vim有着丰富的内建文档系统,使用 :h <关键词> 就可以阅读,如果你想在方便的尝试各种 vimscript ,你可以通过 NORMAL 模式下使用 gQ 命令进入 VimScript 的交互式环境调试命令。

注意:下面的例子中会包含一些形如 <符号> 的符号,意味着正式使用时应该被完全替换成真实的东西,包括左右两边的尖括号。而单独的 <> 在 VimScript 中被用作比较符号。

变量

  • let 命令用来对变量进行初始化或者赋值。
  • unlet 命令用来删除一个变量。
  • unlet! 命令同样可以用来删除变量,但是会忽略诸如变量不存在的错误提示。

默认情况下,如果一个变量在函数体以外初始化的,那么它的作用域是全局变量;而如果它是在函数体以内初始化的,那它的作用于是局部变量。同时你可以通过变量名称前加冒号前缀明确的指明变量的作用域:

  • g:var – 全局
  • a:var – 函数参数
  • l:var – 函数局部变量
  • b:var – buffer 局部变量
  • w:var – window 局部变量
  • t:var – tab 局部变量
  • s:var – 当前脚本内可见的局部变量
  • v:var – Vim 预定义的内部变量

你可以通过 $name 的模式读取或者改写环境变量,同时可以用 &option 的方式来读写 vim 内部的设置值。

数据类型

Number:32 位有符号整数

-123
0x10
0177

Float: 浮点数,需要编译 Vim 的时候,有 +float 特性支持

123.456
1.15e-6
-1.1e3

String: NULL 结尾的 8位无符号字符串

"ab\txx\"--"
'x-z''a,c'

Funcref: 函数引用,函数引用类型的变量名必须以大写字母开头

:let Myfunc = function("strlen")
:echo Myfunc('foobar') " Call strlen on 'foobar'.
6

List: 有序列表

:let mylist = [1, 2, ['a', 'b']]
:echo mylist[0]
1
:echo mylist[2][0]
a
:echo mylist[-2]
2
:echo mylist[999]
E684: list index out of range: 999
:echo get(mylist, 999, "THERE IS NO 1000th ELEMENT")
THERE IS NO 1000th ELEMENT

Dictionary: 无序的 Key/Value 容器

:let mydict = {'blue': "#0000ff", 'foo': {999: "baz"}}
:echo mydict["blue"]
#0000ff
:echo mydict.foo
{999: "baz"}
:echo mydict.foo.999
baz
:let mydict.blue = "BLUE"
:echo mydict.blue
BLUE

没有布尔类型,整数 0 被当作假,其他被当作真。字符串在比较真假前会被转换成整数,大部分字符串都会被转化为 0,除非以非零开头的字符串才会转化成非零。

Read more…

Categories: 随笔 Tags:

Windows 10 – 1803 更新又给我出幺蛾子

May 2nd, 2018 No comments

Windows 10 的 1803 版本更新后,Cygwin 的 Open SSH 服务无法始用,调查半天,Windows 10 新建了个 sshd 的服务,原来的 Cygwin Open SSH 服务被删除了,也安装不上去,解决方法是 ssh-host-config 后面加个参数 --name sshd2 换个新名字重新安装服务。

Categories: 随笔 Tags: