osyo-manga / vim-precious

Vim context filetype
117 stars 7 forks source link

Fix error in `reset_contextlocal()`. #20

Closed Milly closed 5 years ago

Milly commented 5 years ago

reset_contextlocal() で変数名ではなく値自身を execute しているためエラーとなっていた。

osyo-manga commented 5 years ago

ありがとうございます。これって execute "let &".setting[0]."=setting[1]" だとダメなんでしたっけ。 わざわざ old を定義している意味があるのかな、と思い。

Milly commented 5 years ago

setting[0] にはオプション名、setting[1] にはその値が入っています。

osyo-manga commented 5 years ago

あーいえ、バグの意図は理解しているつもりなんですが、それであれば単純に

@@ -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 = {}

という風に修正すればいいんじゃないかな、あと思いまして。 何か勘違いしていたらすみません…。

Milly commented 5 years ago

なるほど理解。 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 = {}
osyo-manga commented 5 years ago

ですです。

old 使うのは、プログラムを冗長にしても意図を明確にしたいというだけです。 というのを突き詰めると下の方がよかったかもしれない。

あー確かにこっちのほうが意味が伝わりやすくてよさそうですね。 お手数ですが修正してもらえると助かります :pray:

Milly commented 5 years ago

(手順を間違えて2回…)

直しました、変数名は precious#contextlocal() 内と合わせました。

osyo-manga commented 5 years ago

ありがとうございます!!!!