Closed Milly closed 5 years ago
ありがとうございます。これって execute "let &".setting[0]."=setting[1]"
だとダメなんでしたっけ。
わざわざ old
を定義している意味があるのかな、と思い。
setting[0]
にはオプション名、setting[1]
にはその値が入っています。
set option=value
なら値の中身そのものを指定できます。
value
に空白やバックスラッシュが含まれるならエスケープしないといけません。let &option = expression
ならエスケープが不要です。
expression
なので変数または即値である必要があります。1
など数値なら偶然にもエラーになりません。あーいえ、バグの意図は理解しているつもりなんですが、それであれば単純に
@@ -136,7 +136,7 @@ endfunction
function! precious#reset_contextlocal()
if exists("b:precious_option_backup")
for setting in items(b:precious_option_backup)
- execute "let &".setting[0]."=".setting[1]
+ execute "let &".setting[0]."=setting[1]"
endfor
endif
let b:precious_option_backup = {}
という風に修正すればいいんじゃないかな、あと思いまして。 何か勘違いしていたらすみません…。
なるほど理解。 old 使うのは、プログラムを冗長にしても意図を明確にしたいというだけです。 というのを突き詰めると下の方がよかったかもしれない。
@@ -140,7 +140,8 @@ endfunction
function! precious#reset_contextlocal()
if exists("b:precious_option_backup")
- for setting in items(b:precious_option_backup)
- execute "let &".setting[0]."=".setting[1]
+ for [optname, old] in items(b:precious_option_backup)
+ execute "let &".optname."=old"
endfor
endif
let b:precious_option_backup = {}
ですです。
old 使うのは、プログラムを冗長にしても意図を明確にしたいというだけです。 というのを突き詰めると下の方がよかったかもしれない。
あー確かにこっちのほうが意味が伝わりやすくてよさそうですね。 お手数ですが修正してもらえると助かります :pray:
(手順を間違えて2回…)
直しました、変数名は precious#contextlocal()
内と合わせました。
ありがとうございます!!!!
reset_contextlocal()
で変数名ではなく値自身をexecute
しているためエラーとなっていた。