Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

Vim プラグインを書くときの行連結の副作用回避について調べ直した

$
0
0

はじめに

Vim プラグインについて引き続き調べています。その中でいくつか Vim プラグインを読んでいたのですが、こんな記述を見ることがよくありました。

lets:save_cpo=&cpo
set cpo&vim" 処理...let&cpo =s:save_cpo
unlet s:save_cpo

こちらの記述がお作法と呼ばれているようだったのですが、なぜこの記述が必要なのか、その意味について調べたいと思います。

行連結の副作用回避

調べてみると、行連結の挙動がおかしくならないようにするための処理のようでした。

Vim の write-plugin のマニュアルを読むと、行連結、副作用の回避という項目があります。

例えばスクリプト内で以下のように複数行に渡って設定を記述している場合があります。これば複数行に渡る処理の記述がある場合、バックスラッシュを行頭につけることで記述を連結することができます。(行連結、line-continuation)と呼ばれています)

nnoremap <Leader>t  \:echo 111

しかし、Vim の挙動を Vi 互換にするかどうかを設定する compatibleオプションがオンになっていると、バックスラッシュの記述が行連結とならない場合が発生する可能性があり、処理がエラーになる場合があります。

そのため、処理の最初で、compatibleオプションの値を一時的に変数に保持しておき、Vim の初期値に設定しておきます。

lets:save_cpo=&cpo
set cpo&vim

cpocompatibleオプションの設定値であり、&で式展開しています。
ちなみに :echo &cpoとすると、現在の compatibleオプションの設定値を確認できます。

:echo &cpo
aABceFs_

それぞれの文字における設定値の意味は、マニュアルの cpoptionsの項目を参照ください。

そして処理実行後にもともとの設定値を戻してあげるという形です。

let&cpo =s:save_cpo
unlet s:save_cpo

おわりに

プラグインの作成のお作法と呼ばれているのは何だったのかがを少し知ることができました。ドキュメントを地道に読んでいくことが大事ですね。

参考


Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>