at backyard

Color my life with the chaos of trouble.

vimでconst が使えるようになったので試してみた

Vim scriptconstが実装されたので早速試してみた備忘録です。

rhysd.hatenablog.com

こちらのポストで実際にパッチを書かれたりんだんさんが詳しく解説されているので、ちゃんとした情報が知りたい方は上の記事をご参照ください。
以下は個人的な備忘録となります。

最新のVimをDocker上で動かす

気軽に試してみたいときDockerは便利ですよね。
手前味噌で恐縮ですが、最新のVimを動かせるDockerファイルがあるので、これを使います。

github.com

下記の通りにコマンドを実行すれば、最新のVimが試せます。

# セットアップ
git clone https://github.com/shinshin86/vimrc-dev-starter-kit-at-docker.git
cd vimrc-dev-starter-kit-at-docker
docker build -t vimrc-dev .
docker run -it --rm --name vimrc-dev-01 vimrc-dev /bin/bash

これらを実行すると、Docker上で動く最新のVimにつながるはず。

vim --version
VIM - Vi IMproved 8.1 (2018 May 18, compiled Jun 20 2019 14:00:12)
(以下省略)

vimを起動させたら早速試してみる。

vimscript の const ことはじめ

constで宣言できるようになっている。

例えばVimの変数代入ではletを使うが、今までは下記のように使用することが可能。

" test.vim
let a = 42
echo a
let a = "test"
echo a

vimを立ち上げて、:source test.vimと実行すると、

42
test

と表示される。

今度はconstを使って下記のように書いてみると、

" test.vim
const a = 42
echo a
const a = "test"
echo a

E995: Cannot modify existing variableというエラーが表示される。
(ちなみに以前のvimだったらconstを使うとE492: Not an editer command: const number = 42 と表示される)

今度は下記のようにして実行してみると、

" test.vim
const a = 42
echo a
let a = "test"
echo a

E741: Value is locked: a というエラーが表示される。

変数破棄を行うunletで試す

" test.vim
let a = 42
echo a
unlet a
echo a

unletは変数の破棄を行うコマンドなので、上のscriptを実行すると5行目で E121: Undefined variable: aとなる。

" test.vim
const a = 42
echo a
unlet a
echo a

letconstに変えてもここの挙動は変わらないよう。
本当はもっといろいろと試したいのだけど、眠くなってきてしまったので、ここまで。
普段からjs触っている身としては、let ではなく const使えるのは嬉しい。