スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Vim scriptで定数

Vim scriptで定数




let A = 10
lockvar A
let A = 20 " 例外


これでできるらしい。

ただし、これでできるのは「変数への書き込み禁止」であって

書き込み禁止を解除することが可能。




let A = 10
lockvar A
unlockvar A
let A = 20 " 通る


なので、強制力はないけど意味力のある変数…って感じになる。



まとめるとこう書ける。




let A = 10 | lockvar A



さらに注意として、間接的に他の辞書などを書き換え禁止できない。


let B = {'bar' : {'baz' : 30}} | lockvar B
let B.bar.baz = 40 " 通る
let C = {'hoge' : [10]} | lockvar C
let C.hoge[0] = 20 " 通る



もちろんこういう対策もできるはできる。


let D = {'ahoge' : [10]} | lockvar D | lockvar D.ahoge[0]




便利。





追記



強者さん達に助言をいただきました。




もしくは



前者の例を使うとこうなります。


let A = {'foo' : {'bar' : 10}} | lockvar 3 A
let A.foo.bar = 20 " 例外



後者の例を使うとこうなります。


let B = {'hoge' : {'baz' : 10}} | lockvar! B
let B.hoge.baz = 20 " 例外



koturnさん、pink_bangbiさん、ありがとうございます!



スポンサーサイト

itunes_bgm.vimのWrapperを書いてみて…ない

僕らにbeautiful lifeを与える業のうち一つであるitunes-bgm.vim

なにやら僕の環境だとitunes_bgm.vim
:ITunesBGMStart

あたりを
・再生中(非同期再生)の途中でもう一度コマンドを実行する
or
・検索中(非同期検索)の途中で(ry
を行うと二重に再生されたりしたので
itunes_bgm.vimのWrapperを書いたような気がしたけど
これはWrapperと言えるの?

※Vim script的にちょっと作法が悪い気がするので注意

let s:itunes_bgm = {'playing' : 0}


command! -bar -nargs=1 ITunesBGMSafeStart
\ if s:itunes_bgm.playing
\| call s:echo_error('vim-itunes-bgm already playing or searching now')
\| else
\| call itunes_bgm#start_by_term()
\| let s:itunes_bgm.playing = 1
\| if exists(':ITunesBGMStart') is 2
\| delcommand ITunesBGMStart
\| delcommand ITunesBGMPlay
\| delcommand ITunesBGMStop
\| delcommand ITunesBGMPlayList
\| endif
\| endif

command! -bar -nargs=1 ITunesBGMSafePlay
\ if s:itunes_bgm.playing
\| call s:echo_error('vim-itunes-bgm already playing now')
\| else
\| call itunes_bgm#play()
\| endif

command! -bar ITunesBGMSafeStop
\ call itunes_bgm#stop()
\| let s:itunes_bgm.playing = 0


" Current iTunes musics (Overridden)
command! -bar ITunesBGMUnitePlayList Unite itunes_bgm




結論


書いた。


追記


あっこれUniteで選択した場合でもduplicateする。

vimrc読書会で読んでもらった、先々週に。

vimrc読書会で僕のvimrcを読んでもらいました!


 自己推薦です。

1. 読んでもらったvimrc
2. 今のvimrc

- - -

ログ。


-------------------------------------------------------------------------------------------------------------------------------------------
thinca : aiya さんの Twitter アカウントどれを指していいのかわからない 03/21 22:55
!reading_vimrc start_reading_vimrc 03/21 23:00
-------------------------------------------------------------------------------------------------------------------------------------------
reading_vimrc : === 第142回 vimrc読書会 ===
- 途中参加/途中離脱OK。声をかける必要はありません
- 読む順はとくに決めないので、好きなように読んで好きなように発言しましょう
- vimrc 内の特定位置を参照する場合は行番号で L100 のように指定します
- 特定の相手に発言/返事する場合は先頭に username: を付けます
- 一通り読み終わったら、読み終わったことを宣言してください。終了の目安にします
- ただの目安なので、宣言してからでも読み返して全然OKです
.vimrc: https://github.com/aiya000/dotfiles/blob/aebde2c97c681a55da3c08744120971d9eb109fd/.vimrc
DL用リンク: https://raw.githubusercontent.com/aiya000/dotfiles/aebde2c97c681a55da3c08744120971d9eb109fd/.vimrc 03/21 23:00
-------------------------------------------------------------------------------------------------------------------------------------------
rbtnn : hi 03/21 23:00

-------------------------------------------------------------------------------------------------------------------------------------------
homaji : hi 03/21 23:00
-------------------------------------------------------------------------------------------------------------------------------------------
aiya000 : @public_ai000ya 03/21 23:00
ですかねーっ!! 03/21 23:00
-------------------------------------------------------------------------------------------------------------------------------------------
thinca : はじめまーす 03/21 23:00
-------------------------------------------------------------------------------------------------------------------------------------------



これは開始の合図のようですね。

- - -



----------------------------------------------------------------------------------------------------------------------------------------------------------------
rbtnn : インデントはタブか 03/21 23:08
----------------------------------------------------------------------------------------------------------------------------------------------------------------


はい、いつもタブです。


- - -



----------------------------------------------------------------------------------------------------------------------------------------------------------------
thinca : L242 ファイルの一覧は glob() で取れます 03/21 23:16
ただ、glob('*') だと . で始まるファイルが取れないので、全部取りたければ glob('.*') と組み合わせる必要がある。結構めんどい 03/21 23:16
----------------------------------------------------------------------------------------------------------------------------------------------------------------


こうですね。

before

let l:dirs = split(s:system('ls ' . s:bundledir), '\n')


after

let l:dirs = split(glob('~/vimfiles/bundle/*'), '\n')




( ここで記事を書く力が尽きたようだ )




みんなさんの力によりだいぶ改善されましたっ!
( 一部改善できてません )
( 感謝の様子 )
zzm_kiritan_utsu.png

vim-quickrun for vim.

皆さん、Vim scriptを書いた時に
ファイルの一部だけ実行したい場合ってよくありますよね。
あります。

ではvisual modeにて実行したい範囲を選択してください。

:を押します。

:'<,'>QuickRun

(部分実行)


楽しい!!
✌('ω'✌ )三✌('ω')✌三( ✌'ω')✌

VimShellのvimshell commandsへのPATHを追加するのがよくわからないからやってみた。

目的
・vimshell commands( vimshell専用のコマンドを定義した.vimファイル )を作りたい
・でも所定の位置( vimshell.vim/autoload/vimshell/commands )に作るとgit関連が面倒になる
・故にvimshell commandsを任意のディレクトリに追加する
・そこをvimshellに参照してもらう

具体例)
tweet.vimを~/.vim/bin/に置き、vimshellでtweet.vimで定義したコマンドを実行できるようにする。


結論
・公式の方法かはわからないし、別の公式的な方法があるかもしれない
・でもできた

参照
tweet.vimについて: http://yomi322.hateblo.jp/entry/2013/01/13/141003



方法
・runtimepathに末尾が'autoload/vimshell/commands'で終わるディレクトリを追加し、そちらにvimshell commandsを置く

具体例)
$ cd ~/.vim
$ mkdir -p autoload/vimshell/commands
$ mv tweet.vim autoload/vimshell/commands
$ vim -c ':VimShell'

vimshell% tweet ツイートテスト


これで "ツイートテスト" という内容のツイートが
VimShellのコマンドラインから投稿できます。

ツイートは1つの例なので、 (http://yomi322.hateblo.jp/entry/2013/01/13/141003
vimshell commandsはかなりの応用がききます。

ドキドキ☆VimShellライフ
ですね。


ぜひあなたもよきVimShellライフを。


あ、あとvimshell commandsってさっきから言ってますけど、
正式名称じゃないです。
正式名称…VimShell用実行ファイル?


あ、momonga氏のvimshell-kawaii.vimもどうぞ。


おまけ。



...

set runtimepath+=~/.vim/bin
vimshell% tweet hoge


...できました。



追記:
あれ? またできてない。
さっき一瞬できたのに。
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。