恥は/dev/nullへ by 初心者

プログラミング素人がのろのろと学んだことをつづっています♪

Vimのcolorscheme

コンソールで使用できる色を調べる

Gvimと違い、ターミナル上のVimでは使用できる色が限られます。しかし、限られているとはいえ記憶はできませんので

:so $VIMRUNTIME/syntax/colortest.vim

を実行してVimで使用できる色を調べています。


colorscheme(butabuta.vim

簡単なものですがVimのcolorschemeを用意してみました(ここに記録を残しておけば、環境が変わっても同じcolorschemeを使えるので)。

なお、colorshemeは「ホームディレクトリ」→「.vim」→「colors」に配置します。

"---------------------------------------
" colorscheme file named butabuta.vim
"---------------------------------------
set background=dark

hi clear
if exists("syntax_on")
  syntax reset
endif

let g:colors_name = "butabuta"

" for Vim on console
highlight Normal     ctermfg=lightGrey   ctermbg=black
highlight Search     ctermfg=black       ctermbg=green
highlight Visual                                       cterm=reverse
highlight Special    ctermfg=brown
highlight Comment    ctermfg=magenta
highlight Type                                          cterm=NONE
highlight String     ctermfg=brown       ctermbg=black cterm=NONE
highlight Statement  ctermfg=yellow                    cterm=NONE
highlight LineNr     ctermfg=red
highlight ModeMsg    ctermfg=yellow      ctermbg=black
highlight CursorLine   ctermfg=NONE      ctermbg=black
highlight ColorColumn  ctermfg=black     ctermbg=cyan
highlight StatusLine   ctermfg=green     ctermbg=black
highlight StatusLineNC ctermfg=grey      ctermbg=black

" 下記の行(for Vim)は効いていなかったので削除した
" highlight Cursor    ctermfg=black   ctermbg=cyan

" for Gvim
highlight Normal     guifg=silver  guibg=black
highlight Search     guifg=black   guibg=cyan     gui=NONE
highlight Visual     guifg=#BF5905  guibg=khaki  gui=NONE
highlight Special    guifg=Orange
highlight Comment    guifg=#BDB76B
highlight Type                                    gui=NONE
highlight String     guifg=Orange   guibg=black  gui=NONE
highlight Statement  guifg=#7E83EF               gui=bold
highlight LineNr     guifg=red
highlight Cursor     guifg=black   guibg=cyan
highlight ModeMsg    guifg=aqua     guibg=black
highlight CursorLine   guifg=NONE   guibg=black
highlight ColorColumn  guifg=black  guibg=cyan
highlight StatusLine   guifg=MediumSlateBlue  guibg=white
highlight StatusLineNC guifg=grey   guibg=black

" ユーザー指定の色
highlight User1 guifg=black guibg=#33FFFF ctermfg=black ctermbg=cyan
highlight User2 guifg=black guibg=#FF0000 ctermfg=black ctermbg=red
highlight User3 guifg=black guibg=yellow  ctermfg=black ctermbg=yellow
highlight User4 guifg=black guibg=#FF7F50 ctermfg=black ctermbg=magenta
highlight User5 guifg=black guibg=silver  ctermfg=black ctermbg=grey


" <情報源>
" :help highlight
" :help group-name

WindowsでDebianのISOイメージが正しいか調べる

目次


DebianのISOイメージをダウンロードする

今回は以下のミラーサイトからISOイメージをダウンロードすることにしました。
https://ftp.jaist.ac.jp/debian-cd/11.7.0/amd64/iso-dvd/

Windowsコマンドプロンプトを開き、curlコマンドを実行しました。

curl -O https://ftp.jaist.ac.jp/debian-cd/11.7.0/amd64/iso-dvd/debian-11.7.0-amd64-DVD-1.iso

ISOイメージのダウンロードが終わったら、同じディレクトリにある「SHA512SUMS.sign「SHA512SUMS」もダウンロードしておきます。


SHA512SUMSを検証する

ISOイメージが正しいか検証する前に「SHA512SUMS」が改ざんされていないか検証します。検証のやり方は下記2つの記事に書いたので、省略します。

GnuPGでSHA512SUMSを検証する - 恥は/dev/nullへ by 初心者
KleopatraでSHA512SUMSを検証する on Windows - 恥は/dev/nullへ by 初心者


ISOイメージのハッシュ値を調べる

SHA512SUMSに問題がないことを確認できたら、コマンドプロンプトを開き、certutilコマンドでISOイメージのハッシュ値を調べます。

書式
certutil -hashfile <ファイル名> <ハッシュアルゴリズム>


この書式にしたがって

certutil -hashfile debian-11.7.0-amd64-DVD-1.iso SHA512

を実行したら、次のように出力されました。

SHA512 ハッシュ (対象 debian-11.7.0-amd64-DVD-1.iso):
569d17a7b4992402b18bebce1933b58a5bc237eaa47545836a3571d49e93099c17deb2ec5a6faafb28125cf42863ca0f5a08a37acb9fe3886828a50a71fa24b9
CertUtil: -hashfile コマンドは正常に完了しました。

2行目にあるのがハッシュ値です。


ハッシュ値を比較する

次にSHA512SUMSファイルを開いて「debian-11.7.0-amd64-DVD-1.iso」に関する行を探すと、

569d17a7b4992402b18bebce1933b58a5bc237eaa47545836a3571d49e93099c17deb2ec5a6faafb28125cf42863ca0f5a08a37acb9fe3886828a50a71fa24b9  debian-11.7.0-amd64-DVD-1.iso

という記述が1行目にありました(行末に debian-11.7.0-amd64-DVD-1.iso と書かれています)。

この行にあるハッシュ値と、先ほどcertutilコマンドでISOイメージから出力したハッシュ値を比較します。両者が一致していればダウンロードしたISOイメージは正しい(壊れていない、改ざんされていない)ということになります。


<おまけ>
sha512sumコマンドが使えれば楽なのですが、Windowsコマンドプロンプトpowershellにはそれらしきものが見当たらなかったので、Vimハッシュ値の比較を行いました。

空のファイルに、ISOイメージから出力したハッシュ値とSHA512SUMSに記述されていたハッシュ値を貼り付けます。たとえば、1行目にISOイメージから出力したハッシュ値があり、2行目にSHA512SUMSに記述されていたハッシュ値があるとします。このファイルをVimで開いて

:sort u

を実行します。このコマンドを使うと重複した行が削除されるので、1行目と2行目のハッシュ値が同じものなら、片方が削除され、1つの行だけが残ります。


(余談)Liveイメージとは何か?

ISOイメージを探してミラーサイトを眺めていた折

11.7.0-live/  2023-04-30 05:47 -  
11.7.0/       2023-04-30 05:47 -     

という風に「11.7.0-live」というディレクトリも並んでいました。これは何に使うのかなと思いDebianサイトを調べたところ、次の記述がありました。

Live install images

A live install image contains a Debian system that can boot without modifying any files on the hard drive and also allows installation of Debian from the contents of the image.

[情報源] https://www.debian.org/CD/live/index.en.html


ドライブ上にインストールすることなくDebianを試せるようです。今のところ使う予定はありませんが、これはこれで便利そうです。

KleopatraでSHA512SUMSを検証する on Windows

Debian上でGnuPGを使ってSHA512SUMSを検証した時の作業メモを下記リンクの記事に書きました。

GnuPGでSHA512SUMSを検証する - 恥は/dev/nullへ by 初心者

一方、本記事はWindows上で同じことをやった時の作業メモです。本記事は上記リンクに書いたことをベースとしているので、上記リンクを先に読むと本記事の内容が分かりやすいかもしれません(?)。


目次


GnuPGのダウンロードとインストール

<ダウンロード>

https://gnupg.org/download/

の中段にある「GnuPG binary releases」からGpg4winをダウンロードします。寄付をしてくださいという画面が現れますが「$0」を選べば無料でダウンロードできます。

ファイルをダウンロードすると、以下の画面が現れます。

Get started – your next steps:

1. Check integrity of the downloaded Gpg4win installer!
2. Install Gpg4win.
3. Create an OpenPGP key pair (or import an existing one) with Kleopatra which is installed together with Gpg4win by default.
4. Sign/encrypt a file or an email to yourself for testing.
5. Read more about the public key method (see chapter 1-5 in Gpg4win Compendium).
6. Ask your questions and report your problems to the Gpg4win Community.

(備考)
1のリンク先 https://gpg4win.org/package-integrity.html
5のリンク先 https://gpg4win.org/documentation.html


(A) 1の「Check integrity」という部分(リンク)をクリックすると、ファイルのS/N等が記述されたページに遷移します。
(B) ダウンロードしたファイルを右クリックしてプロパティを開くと、S/N等を見ることができます。

遷移したページ(A)に書かれているS/N等と(B)のS/N等が一致しているか確認します。

ダウンロードしたファイルのプロパティに関しては、以下のページに画像付きで載っています。
https://science-as-a-candle-in-the-dark.hatenablog.com/entry/2018/11/11/203913


<インストール>
テキトーにクリックしていくだけでインストールできますが、次のページは参考になりました(一連の流れが画像付きで載っています)。

https://www.ochappa.net/posts/gpg-win-setup

GnuPGをインストールするとデスクトップに「Kleopatra」というショートカットが作成されます。KleopatraはGnuPGGUIで使うためのものです。


gpgの出力が文字化けする

DebianのISOイメージが壊れていないか確認するには「SHA512SUMS」ファイルに記述されているハッシュ値を使います。一方、「SHA512SUMS」ファイルが改ざんされていないかを検証するには「SHA512SUMS.sign」ファイルを使います。

コマンドで検証を行う場合は

gpg --verify SHA512SUMS.sign SHA512SUMS

としますが、コマンドプロンプトpowershellでgpgコマンドを使ったらgpgが出力するメッセージの一部が文字化けしていました。

ネット検索してみたところ、どうやら勝手にコードページ(chcp)が変わってしまうそうです。現時点では良い解決策が無いらしいと分かったので、GnuPGと一緒にインストールされたKleopatraを使うことにしました。


Kleopatraのマニュアル

https://docs.kde.org/stable5/en/kleopatra/kleopatra/index.html


Kleopatraに公開鍵をインポートする

KleopatraにDebianの公開鍵をインポートする必要があります。公開鍵は以下のページにあります。

Verifying authenticity of Debian images
https://www.debian.org/CD/verify.en.html

このページの下部にある

pub   rsa4096/988021A964E6EA7D 2009-10-03
      Key fingerprint = 1046 0DAD 7616 5AD8 1FBC  0CE9 9880 21A9 64E6 EA7D
uid                  Debian CD signing key <debian-cd@lists.debian.org>

pub   rsa4096/DA87E80D6294BE9B 2011-01-05 [SC]
      Key fingerprint = DF9B 9C49 EAA9 2984 3258  9D76 DA87 E80D 6294 BE9B
uid                  Debian CD signing key <debian-cd@lists.debian.org>

pub   rsa4096/42468F4009EA8AC3 2014-04-15 [SC]
      Key fingerprint = F41D 3034 2F35 4669 5F65  C669 4246 8F40 09EA 8AC3
uid                  Debian Testing CDs Automatic Signing Key <debian-cd@lists.debian.org>

のうち、pub行の「rsa4096/」に続く部分がリンクとなっています。リンク部分を右クリックして「名前を付けてリンク先を保存」を選びます。こうしてPCに保存したファイルの中身が公開鍵です。

3つのpub行で同じことを行ってPCに保存した3つの公開鍵をKleopatraにインポートします。


「インポート」ボタンを押すと、ファイルを選択する画面が現れるので、ここで先ほどPCに保存した3つのファイルを指定します。これで、3つの公開鍵がKleopatraにインポートされます。

インポートが終わるとKleopatraに次のように表示されます。


KleopatraでSHA512SUMSを検証する

同じフォルダの中に「SHA512SUMS.sign」と「SHA512SUMS」を置いておきます。 Kleopatraの「復号/検証」ボタンをクリックするとファイルを選択する画面が現れるので、SHA512SUMS.signを選びます。すると、SHA512SUMSの検証が行われます。

画面には次のように表示されました。

ここで、「監査ログを表示」という部分をクリックすると、次の画面が現れました。

やや不安な文言が並んでいますが、3行目の

gpg: "Debian CD signing key <debian-cd@lists.debian.org>"からの正しい署名 [不明の]

のように「からの正しい署名」という文言があればOKです。

画面に表示された文言に関しては以下の記事に書いたので省略します。
GnuPGでSHA512SUMSを検証する - 恥は/dev/nullへ by 初心者


<補足>
WindowsでSHA512SUMSファイルをダウンロードすると拡張子が付いて「SHA512SUMS.txt」となっているかもしれません。この場合、「復号/検証」ボタンをクリックして現れるファイル選択画面でSHA512SUMS.signを選ぶだけでは足りません。SHA512SUMS.signを選んだ後、引き続きファイル選択画面が表示されるので、ここでSHA512SUMS.txtを選択します。


公開鍵が無い状態で検証した場合

公開鍵をKleopatraにインポートせずに検証を実行すると次のように表示されます。


ここで「監査ログを表示」をクリックすると、次の画面が現れました。

3行目にあるとおり、「署名を検査できません: 公開鍵がありません」と表示されます。

GnuPGでSHA512SUMSを検証する

この記事の作業はDebian 11(bullseye)で行っています。

目次


概略

DebianのサイトからダウンロードしたISOイメージに問題がないか調べる際、SHA512SUMSというファイルに記述されているハッシュ値を使いますが、そもそもこのファイルが第三者によって改ざんされていないか確認する必要があります。

その確認を行うために、分離署名というものを使います。分離署名はSHA512SUMS.signというファイルです。

SHA512SUMS        チェックサム(ハッシュ値)を記述したファイル
SHA512SUMS.sign   SHA512SUMSに対する分離署名ファイル

本記事は、GnuPGとSHA512SUMS.signを使ってSHA512SUMSが正しいかどうかを検証した際の作業メモです。


検証に失敗した場面

SHA512SUMSとSHA512SUMS.signを置いてあるディレクトリで

$ gpg --verify SHA512SUMS.sign SHA512SUMS 

を実行したら、次のように表示されました。

gpg: ディレクトリ'/home/hoge/.gnupg'が作成されました
gpg: keybox'/home/hoge/.gnupg/pubring.kbx'が作成されました
gpg: 2023年04月30日 05時48分09秒 JSTに施された署名
gpg:                RSA鍵DF9B9C49EAA9298432589D76DA87E80D6294BE9Bを使用
gpg: 署名を検査できません: No public key

5行目に「署名を検査できません」とあります。これは、SHA512SUMS.signを検証するために必要な公開鍵がGnuPGにインポートされていないためです。


公開鍵のインポート

公開鍵をインポートするために、Debianのサイトで公開鍵のIDを調べます。

Verifying authenticity of Debian images
https://www.debian.org/CD/verify.en.html

を開くと、ページ下部に公開鍵の情報が載っています。

pub   rsa4096/988021A964E6EA7D 2009-10-03
      Key fingerprint = 1046 0DAD 7616 5AD8 1FBC  0CE9 9880 21A9 64E6 EA7D
uid                  Debian CD signing key <debian-cd@lists.debian.org>

pub   rsa4096/DA87E80D6294BE9B 2011-01-05 [SC]
      Key fingerprint = DF9B 9C49 EAA9 2984 3258  9D76 DA87 E80D 6294 BE9B
uid                  Debian CD signing key <debian-cd@lists.debian.org>

pub   rsa4096/42468F4009EA8AC3 2014-04-15 [SC]
      Key fingerprint = F41D 3034 2F35 4669 5F65  C669 4246 8F40 09EA 8AC3
uid                  Debian Testing CDs Automatic Signing Key <debian-cd@lists.debian.org>

pub行の「rsa4096/」の後ろに続いている公開鍵IDを使用します。

$ gpg --keyserver keyring.debian.org --recv-keys 988021A964E6EA7D

を実行すると

gpg: 鍵988021A964E6EA7D: 公開鍵"Debian CD signing key <debian-cd@lists.debian.org>"をインポートしました
gpg:           処理数の合計: 1
gpg:             インポート: 1

と表示されました。これで公開鍵を1つインポートできました。

これに続いて

$ gpg --keyserver keyring.debian.org --recv-keys DA87E80D6294BE9B
$ gpg --keyserver keyring.debian.org --recv-keys 42468F4009EA8AC3

を実行すれば、Debianのサイトに記述されていた3つの公開鍵がインポートされます。

インポートされたか確認してみます。

$ gpg --list-key

を実行したら、次のように表示されました。

/home/hoge/.gnupg/pubring.kbx
-----------------------------
pub   rsa4096 2009-10-03 [SC]
      10460DAD76165AD81FBC0CE9988021A964E6EA7D
uid           [  不明  ] Debian CD signing key <debian-cd@lists.debian.org>

pub   rsa4096 2011-01-05 [SC]
      DF9B9C49EAA9298432589D76DA87E80D6294BE9B
uid           [  不明  ] Debian CD signing key <debian-cd@lists.debian.org>
sub   rsa4096 2011-01-05 [E]

pub   rsa4096 2014-04-15 [SC]
      F41D30342F3546695F65C66942468F4009EA8AC3
uid           [  不明  ] Debian Testing CDs Automatic Signing Key <debian-cd@lists.debian.org>
sub   rsa4096 2014-04-15 [E]

なお、表示された各行のうちpub行とuid行の間に表示されるのは key fingerprint です。このkey fingerprintとDebianサイトに記載されているkey fingerprintが一致していればOKです。

<補足:ファイルからのインポート>
公開鍵はファイルからインポートすることもできます。

今回の例に当てはめると、Debianのサイトを見ると公開鍵のID部分はリンクになっています。ここを右クリックして「名前を付けてリンク先を保存」を選びます。
すると、公開鍵がファイルとしてダウンロードされます。

仮にダウンロードしたファイルが hoge_key.txtだった場合

gpg --import hoge_key.txt

を実行することで公開鍵がインポートされます。


公開鍵にもとづいて検証する

ここまでの作業で公開鍵はインポートされました。改めてSHA512SUMS.signを使ってSHA512SUMSを検証します。

<検証に使う書式>
gpg --verify <分離署名ファイル> <署名対象のファイル>


上記書式に従って

$ gpg --verify SHA512SUMS.sign SHA512SUMS 

を実行したら

gpg: 2023年04月30日 05時48分09秒 JSTに施された署名
gpg:                RSA鍵DF9B9C49EAA9298432589D76DA87E80D6294BE9Bを使用
gpg: "Debian CD signing key <debian-cd@lists.debian.org>"からの正しい署名 [不明の]
gpg: *警告*: この鍵は信用できる署名で証明されていません!
gpg:       この署名が所有者のものかどうかの検証手段がありません。
 主鍵フィンガープリント: DF9B 9C49 EAA9 2984 3258  9D76 DA87 E80D 6294 BE9B

という検証結果が表示されました。

この検証結果を見ると「警告」という言葉もあって少々不安ですよね。しかし、ネット情報によると

"Debian CD signing key <debian-cd@lists.debian.org>"からの正しい署名 [不明の]

という風に「からの正しい署名」が表示されていれば問題ないようです。

この点に関しては、

http://bluearth.cocolog-nifty.com/blog/debian_gnulinux/index.html

というサイトを参照しました。このサイトによると上記の検証結果は

・インポートした公開鍵で署名を検証した結果、このSHA512ファイルは確かなものである
・しかし、この公開鍵が信用できるかは不明である

ということを示しているようです(この辺りのことは同サイトにもう少し詳しく書かれています)。


なお、同サイトによると、「信頼度」を変更すればもう少し安心できる答えが返ってくるようです。しかし、実質的なメリットが無いので私はやっていません。ご興味のある方は、同サイトの下部にある「信頼度を変更する場合」という項目を読むと幸せになれるかもしれません。


インポートした公開鍵を削除するには?

今回の作業途中、不要な公開鍵をGnuPGにインポートしてしまいました。そこで、インポートした公開鍵を削除しました。

書式
$ gpg --delete-keys <メールアドレス>

例えば、

$ gpg --delete-keys hogehoge@debian.org

を実行すると

この鍵を鍵リングから削除しますか? (y/N) 

と聞かれるので y を入力します。

この後で「gpg --list-key」を実行すれば、公開鍵が削除されていることを確認できます。


参考にしたサイト

(1) http://bluearth.cocolog-nifty.com/blog/debian_gnulinux/index.html
(2) https://www.debian.org/CD/verify.en.html
(3) https://keyring.debian.org/
(4) https://lecture.ecc.u-tokyo.ac.jp/johzu/joho/Y2022/GPG/GPG/index.html


(1)はDebian環境でGnuPGの使い方を説明しています。(2)と(3)はDebianのサイトです。(4)は大学の授業スライドです。GPGの基本から説明しています。

OneDriveとの連携をオフにする

Windowsを初期化して新たに環境構築を始めたところ、OneDriveが有効になっていることに気づきました。たとえば、ファイルをDocumentsに保存したら

C:\Users\hoge\OneDrive\Documents      ← hogeとDocumentsの間にOneDriveがある

に保存されているんですよね・・・。それに、デスクトップにファイルを作成すると、OneDriveとの同期が始まります・・・。

普段は別のクラウドストレージを利用しているので、OneDriveとの連携をオフにすることにしました。


目次


デスクトップ等とOneDriveの同期をオフにする

(1) デスクトップ画面右下にあるタスクバーで、OneDriveのアイコンをクリックする。

(2) 右上に登場する歯車アイコンをクリックする
(この画像はOneDriveとの連携をオフにした後で撮影したため「OneDriveが接続されていません」と表示されています)

(3) 「設定」をクリックする

(4) 「同期とバックアップ」→ 「バックアップを管理」

(5) 「ドキュメント」「写真」「デスクトップ」それぞれにあるスイッチを全てオフにする。


私の場合、Windowsを初期化した直後にこの作業を行ったので影響はありませんでしたが、ネット情報によると、上記作業を行うことによりデスクトップにあったファイルやフォルダが消えてしまうようです。ただし、データが消失したわけではなく、OneDrive上にデータはあるので、そこからPCにデータを移せば問題ないそうです。


PCとOneDriveのリンクを解除する

もう1つの作業はPCとOneDriveのリンクを解除することです。

(1) デスクトップ画面右下にあるタスクバーで、OneDriveのアイコンをクリックする。

(2) 右上に登場する歯車アイコンをクリックする

(3) 「設定」をクリックする

(4) 「アカウント」→ 「このPCからリンクを解除する」


点検

以上でOneDriveとの連携はオフになったと思いますが、念のため、Documentsにファイルを保存して、保存した場所が

C:\Users\hoge\Documents

となっているか(C:\Users\hoge\OneDrive\Documentsになっていないか)をチェックした方が良いと思います。


スタートアップからOneDriveを除去

起動時にOneDriveが起動するようになっている場合、「スタートアップ」フォルダからOneDriveを除去する必要があります。

スタートアップフォルダの場所は以下のとおりです。

Cドライブ → ユーザー → (ユーザー名) → AppData → Roaming → MicrosoftWindows → スタートメニュー → プログラム → スタートアップ


(備考)
特定のユーザーではなく、全てのユーザーに適用されるスタートアップは以下のフォルダを使うようです。

Cドライブ → ProgramData → MicrosoftWindows → スタートメニュー → プログラム → スタートアップ

ddc.vim覚書

Vimのバージョンが9.0になっていることを最近知り、vim-jpからWindows用のバイナリ―をダウンロードしました。

しかし、Vim9.0では今まで使っていた補完プラグインが使えないことが分かりました。そこで、ddc.vimというものを試すことにしたのですが、使い始めるまでに少し迷子になったので、この備忘録を書くことにしました。


目次


denoのインストール

まずはdenoをインストールします。

denoのサイト
https://deno.com/runtime

インストール方法のページを読み、PowerShell

irm https://deno.land/install.ps1 | iex

を実行しましたが、上手く行きませんでした。

「はて?」と思いつつもPowerShellの事をよく分かっていないので、何となく楽そうなScoopによるインストール方法を試すことにしました。PowerShell

Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
irm get.scoop.sh | iex

を実行すると、Scoopのインストールが終わりました。

念のためExecutionPolicyを元に戻しておきました。

Set-ExecutionPolicy Restricted -Scope CurrentUser

(備考)ExecutionPolicyを確認するには、Get-ExecutionPolicyを使います。

それからdenoをインストールすべく、以下のコマンドを実行しました。

scoop install deno


すると、「このシステムではスクリプトの実行が無効になっているため(以下略)」というコメントが表示されました。ExecutionPolicyが原因のようだったので、ExecutionPolicyをRemoteSignedにしてからscoopコマンドを実行しました。

Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
scoop install deno

画面に「'deno' (1.32.5) was installed successfully!」と表示され、無事にdenoのインストールができました。 今にして思えば、最初にPowerShellでインストールに失敗したのもExecutionPolicyが原因だったのかもしれません。

最後にExecutionPolicyをRestrictedに戻してPowerShellウィンドウを閉じました。

Set-ExecutionPolicy Restricted -Scope CurrentUser
Get-ExecutionPolicy


余談ですが、次のコマンドでdenoを最新版にアップグレードできるようです。

deno upgrade


ddc.vim、denops.vim、UIプラグインのインストール

次に、ddc.vim、denops.vim、UIプラグインをインストールします。私はvim-plugを使用していますので.vimrc(もしくは_vimrc)を開いて、以下のようにPlugで始まる3行を記述しました。

" vim-plugを使っている場合の記述例

call plug#begin('~/.vim/plugin_box')    ← 括弧内は各自の環境によって異なります
    Plug 'Shougo/ddc.vim'
    Plug 'vim-denops/denops.vim'
    Plug 'Shougo/ddc-ui-native'
call plug#end()


当初、必須のものはddc.vimとdenops.vimだけだと思っていたのですが、UIプラグインをインストールせずにddc.vimを動かそうとしたら

[ddc] You must install ddc UI plugins and specify "ui" option.

というメッセージが表示されたので、ddc-ui-nativeもインストールすることにしました。


.vimrc(もしくは_vimrc)を再読み込みして、vim-plugでプラグインをインストールしました。

:source %
:PlugInstall


sourceやfilterのインストール

次に、補完候補を供給するsource、補完候補を絞り込んだり並べ替えたりするfilterをインストールします。

sourceやfilterは以下の場所で探すことができました。

https://github.com/topics/ddc-source
https://github.com/topics/ddc-filter


上記サイトを眺めた結果、次のものをインストールすることにしました。

Shougo/ddc-source-around   → 現在バッファから補完候補を供給するsource
matsui54/ddc-dictionary    → 辞書ファイルから補完候補を供給するsouce
tani/ddc-fuzzy             → ファジーマッチングをするfilter


以上3つをvim-plugの設定項目に追記しました。

" vim-plugを使っている場合の記述例

call plug#begin('~/.vim/plugin_box')    ← 括弧内は各自の環境によって異なります
    Plug 'Shougo/ddc.vim'
    Plug 'vim-denops/denops.vim'
    Plug 'Shougo/ddc-ui-native'
    Plug 'Shougo/ddc-source-around'   " [source] 現在バッファから補完候補を供給
    Plug 'matsui54/ddc-dictionary'    " [source] 辞書ファイルから補完候補を供給
    Plug 'tani/ddc-fuzzy'             " [filter]
call plug#end()


.vimrc(もしくは_vimrc)を再読み込みして、vim-plugでプラグインをインストールしました。

:source %
:PlugInstall


source, source option, source paramの設定

インストールしたものを使うために、.vimrc(もしくは_vimrc)に以下の内容を追記しました。

" UI
call ddc#custom#patch_global('ui', 'native')

" SOURCE
call ddc#custom#patch_global('sources', ['around', 'dictionary'])

" SOURCE OPTION    (filterはここで指定)
call ddc#custom#patch_global('sourceOptions', {
    \ 'around': {'mark': '[Around]'},
    \ 'dictionary': {'mark': '[Dict]'},
    \ '_': {
    \ 'matchers': ['matcher_fuzzy'],
    \ 'sorters': ['sorter_fuzzy'],
    \ 'converters': ['converter_fuzzy'],
    \ 'isVolatile': v:false
    \ }
    \ })
"   isVolatileがv:trueだとdictionaryに含まれていない補完候補も登場したので v:falseにしました

" SOURCE PARAM
call ddc#custom#patch_global('sourceParams', {
    \ 'dictionary': {'dictPaths':
    \ ['C:\Users\hoge\Documents\hogehoge\koten',
    \  'C:\Users\hoge\Documents\hogehoge\kanbun'],
    \ 'showMenu': v:false
    \ }
    \ })
"   この例では2つの辞書(kotenとkanbun)を指定している
"   showMenu を v:true にすると補完候補の供給元である辞書ファイル名が表示される

" ddc.vimを有効化する
call ddc#enable()

もし私のような素人でddc.vimをこれから触ろうとする人が上記の設定内容を見たらチンプンカンプンだと思いますので、情報源について触れておきます。

情報源は、sourceやfilterに付属しているドキュメントに書かれた設定例です。「EXAMPLE」とか「CONFIGURATION」とか、そういった見出しを探してみると良いと思います。


sourceの設定に関する説明

デフォルトでは何のsourceも設定されていないので、補完候補が表示されません。何か1つ以上のsourceを指定する必要があります。

" この例はddc.vim作者様のZenn記事から引用しました

call ddc#custom#patch_global('sources', ['around'])

この例にある ddc#custom#patch_global() はグローバル設定を変更するもので、aroundというsourceを指定しています。


複数のsourceを指定する場合は次のようにします。

" この例はddc.vim作者様のZenn記事から引用しました

call ddc#custom#patch_global('sources', ['around', 'nextword'])

この例ではaround及びnextwordというsourceを指定しています。
なお、指定した順序が候補の順序になるそうです。この例では、aroundが先にありますので、aroundの候補が先に登場して、次にnextwordの候補が登場します。


source optionの設定に関する説明

次にsource optionの設定方法です。

" この例はddc.vim作者様のZenn記事から引用しました

call ddc#custom#patch_global('sourceOptions', {
      \ 'around': {'mark': 'A'},
      \ 'nextword': {'mark': 'nextword'},
      \ '_': {
      \   'matchers': ['matcher_head'],
      \   'sorters': ['sorter_rank']},
      \ })


まず、次の行を見てみます。

\ 'around': {'mark': 'A'},


この部分は

'source':{'souce option': 'source optionの引数'}

となっています。つまり、sourceはaroundです。source optionはmarkです。markの引数は A です。


\ '_': {
\   'matchers': ['matcher_head'],
\   'sorters': ['sorter_rank']},

この部分ではsourceとして _ を指定していますが、基本構造は同じです。
sourceは _ です(後述)。source optionはmatchersとsortersです。matchersの引数はmatcher_headで、sortersの引数はsorter_rankです。

(1行にした図)

'_'   :   { 'matchers': ['matcher_head'],   'sorters': ['sorter_rank']}
 ↑             ↑              ↑                ↑             ↑
source       source option    引数          source option     引数

引数を囲んでいる [ ] についてはよく分かりませんが、複数の引数を並べることを考慮しているのかもしれません。matchersに対して複数の引数を与える場合、たとえば次のようになります。

matchers: ['matcher_head', 'matcher_length'],


< _ とは何か?>
作者様のZenn記事に「source名に _ を与えることでデフォルトの設定を変更します」と書かれています。一方、( _ ではなく)特定のsource名を指定した場合、source optionはそのsourceにだけ適用されます。

" この例はddc.vim作者様のZenn記事から引用しました

call ddc#custom#patch_global('sourceOptions', {
      \ 'around': {'mark': 'A'},
      \ 'nextword': {'mark': 'nextword'},
      \ '_': {
      \   'matchers': ['matcher_head'],
      \   'sorters': ['sorter_rank']},
      \ })

2行目と3行目ではsource名を指定しているので、source optionは特定のsourceにだけ適用されます。
2行目はaroundに固有の設定をしています(around をsourceとした補完候補には A と表示される)。
3行目はnextwordに固有の設定をしています(nextwordをsourceとした補完候補にはnextwordと表示される)。
4行目以下は全てのsourceに対する設定をしています。

<markの具体例>
markについては具体例を見た方がイメージが湧くと思います。

call ddc#custom#patch_global('sourceOptions', {
    \ 'around': {'mark': '[Around]'},
    \ 'dictionary': {'mark': '[Dict]'},

これは私の設定内容です。aroundというsourceから提供された補完候補には[Around]と表示され、dictionaryというsourceから提供された補完候補には[Dict]と表示されます。



ついでに、補完候補の出現順序にも触れておきます。sourceの設定方法について述べた折、「指定した順序が候補の順序になる」と書きました。私の環境では

call ddc#custom#patch_global('sources', ['around', 'dictionary'])

という風にaroundをdictionaryよりも先に指定しているので、スクリーンショットにあるとおり、[Around] → [Dict]という順序になっています。


<その他のsource option>
その他のsource optionについては、ddc.vimのドキュメントで「SOURCE OPTIONS」の項目に記述されています。


filterの設定に関する説明

" この例はddc.vim作者様のZenn記事から引用しました

call ddc#custom#patch_global('sourceOptions', {
      \ 'around': {'mark': 'A'},
      \ 'nextword': {'mark': 'nextword'},
      \ '_': {
      \   'matchers': ['matcher_head'],
      \   'sorters': ['sorter_rank']},
      \ })

の5行目と6行目にあるmatchersとsortersについては、ddc.vimのドキュメントに次のように記述されています。

matchers(string[])
    It is a list of registered filter names to filter items by user input.
    Items will be processed in the order you specify here.
    Default: []

sorters(string[])
    It is a list of registered filter names to sort items.
    Items will be processed in the order you specify here.
    Default: []

この記述からmatchersとsortersの引数として指定されているmatcher_headやsorter_rankはfilterだと分かります。では、filterとは何でしょうか?


ddc.vimのドキュメントの「FILTERS」という項目に以下の説明があります。

(1) sourceから渡された補完候補はmatchers, sorters, convertersの引数として指定されたfilterに渡される
(2) matchersは、ユーザーが入力した内容に応じて補完候補を絞り込む  
    sortersは、補完候補を並べ替える  
    convertersは、補完候補の属性を変更する(←これ、まだ意味を理解していません、汗)  
(3) 呼び出される順番は「matchers → sorters → converters」の順。  
(4) デフォルトでは何も指定されていないので、各自で設定する必要がある。  
(5) filterは"denops/@ddc-filters/*.ts"に置く
(6) filter名はファイル名  
(7) filterは https://github.com/topics/ddc-filterで探す

なお、作者様のZenn記事には「sourcesやmatchers, sorters, convertersは名前のチェック機能が存在しており、インストールしていないものを指定するとエラーになります」と書かれています。

<複数のmatchersを指定する例>

matchers: ['matcher_head', 'matcher_length'],

このように複数のmatchers用filterを並べて記述することもできます。


その他

<ポップアップで補完候補を表示するプラグイン
Shougo/pum.vim

<source>
matsui54/ddc-buffer

<filter>
LumaKernel/ddc-source-file (ファイル名補完)
Shougo/ddc-filter-matcher_head
Shougo/ddc-filter-sorter_rank
Shougo/ddc-filter-converter_remove_overlap
Shougo/ddc-filter-matcher_length

Microsoft Authenticatorのハナシ

Microsoft Authenticatorを試してみました。


用語の説明

以下の文章で、単に「Authenticator」と記述されている場合、Microsoft Authenticatorを指します。 「OTP」とはワンタイムパスワードを指します。


実験したこと 1

(1) AuthenticatorをiPhoneにインストールしました。

(2) PCでGoogleアカウントを開いて、認証アプリの登録をしました。
→ (Google Authenticatorではなく)Authenticatorで登録。

(3) AuthenticatorのバックアップがiCloud Driveに残るように設定しました。

・iPhoneの「設定」→ 「iCloud」において、iCloud DriveとAuthenticatorをONにします。
・Authenticatorの中にある「設定」→「iCloudバックアップ」をONにします。


(4) iPadに Authenticatorをインストールしました。
Authenticatorを開いて「回復」を使ったところ、iCloud上にバックアップされている内容でiPadのAuthenticatorが使えるようになりました。

この時点では、「iPhoneのAuthenticatorに表示されているOTP」と「iPadのAuthenticatorに表示されているOTP」は一致していました。

(5) PCでGoogleアカウントを開いて、認証アプリの変更を行いました。

(1) iPhoneのAuthenticator画面からGoogle用のOTPを表示している行を削除しました。
(2) PCの画面に表示されているQRコードを読み取って、iPhoneのAuthenticatorにGoogle用のOTP項目をセットアップしました。


(6) iPadのAuthenticatorを一旦削除しました。

(7) 再度iPadにAuthenticatorをインストールしました。
この際も「回復」を使いました。


ここで「iPhoneのAuthenticatorに表示されているOTP」と「iPadのAuthenticatorに表示されているOTP」を比較したら、表示されているOTPが異なっていました。

おそらく、、、iPhoneのAuthenticatorが保持している情報は新しくなったものの、その新しい情報がiCloudにバックアップされる前に、iCloudからiPadのAuthenticatorを「回復」してしまったものと思います。この結果、iPadには古いバックアップ情報が反映し、iPhoneiPadとで異なるOTPが表示されたのでしょう。


実験したこと 2

この後、iPadにおいてもAuthenticatorのバックアップをiCloud Driveに残すように設定してみました。

iPadの「設定」→ 「iCloud」において、iCloud DriveとAuthenticatorをONにします。
iPadのAuthenticatorの「設定」→「iCloudバックアップ」をONにします。


この後、しばらくしてiPhoneのAuthenticatorに「このデバイスのバックアップ」という項目が表示されました。


これをタップすると「iCloudアカウントのバックアップが別のデバイスに既に存在します」というポップアップが現れました。次の画像でマスクした部分を読むと、それはiPadからiCloud Driveにアップロードされたバックアップでした。


 


結論

複数のデバイスにAuthenticatorを入れていると、Google上で認証アプリの変更を行った場合に、Authenticatorが入っているデバイス間で上述した状況になりそうなので、インストールするデバイスは1つだけにしておこうと思いました。

実際、iCloud Driveにバックアップを保存しておけば、iPhoneiPadが故障・紛失という状況になっても、バックアップから「回復」を行えますから問題ありません。

それにデバイスを2つ以上持っている場合、全てのデバイスが同時に故障・紛失する可能性は低いと思いますので、手元に残っているデバイスにバックアップから「回復」を行えば、すぐにAuthenticatorを使用できます。


余談(Google Authenticator)

最後にGoogle Authenticatorに触れておきますと、こちらはiCloudにバックアップすることができないので、複数のデバイスにインストールしておきたい気分になります。

しかし、過去に実験したところ、iPhoneGoogle AuthenticatorとiPadGoogle Authenticatorとで異なるOTPを表示していたことがありました。

よって、Google Authenticatorを複数のデバイスで使う場合、AというデバイスGoogleの認証アプリ登録(認証アプリ変更を含む)を行ったら、BというデバイスにあるGoogle Authenticatorを(AデバイスGoogle Authenticatorからエクスポートした情報で)更新する必要がありそうです。