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

VimでCoq 改

$
0
0

Vim で CoqIDE みたいに書けるプラグイン Coquille の改良版を作ったよ.

スクリーンショット

内容は適当です.

Coquille use at win32unix with multiple buffers

Coquile use at win32

VS

検索すると,いくつか Coq のための Vim Plugin が見つかります.

  • the-lambda-church/coquille
    • fork元のプラグインです
    • pythonに依存しています.なんか無限ループしたりしていて,書き換えようと思いました
  • vim-scripts/CoqIDE
    • 試した気がするけど忘れました
  • eagletmt/coqtop-vim
    • 後で検索したら見つけました
  • jvoorhis/coq.vim
    • シンタックスハイライトが含まれています.
    • 元の the-lambda-church/coquille にも含まれています
    • LumaKernel/coquille には改良して,いまも改良中のものが入っています

特徴

  • 必要なのは Vim と Coq のみ
  • 複数のバッファを同時に開ける
  • Admitted. などのハイライトあり
  • GUIのVIMなら背景色から自動で色を決める
  • 非同期
  • (fork元に対して) バグがかなり修正されている
  • 複数の Coq のバージョンに対応
    • 最新の Coq 8.11 (beta) や Coq 8.10 など
    • Coq 8.6 なども
    • Coq 8.5pl3 とかいうのも
    • もっと古いのはビルドわからなかったので試してない… あとで Actions に追加しようとは思います

キーボードをグチャグチャガチャガチャやっても耐えます.
逆にガチャガチャやってぶっ壊せたら Issue どんとこいという感じです.
( Issue は気軽にください )

インストール

プラグインマネージャを使っている場合は, LumaKernel/coquilleを追加してください.

もしくは自分で runtimepathの参照先のどこかに clone してください.

dein.vimでの例

TOMLファイルを使っている場合は,以下を追加してください.

[[plugins]]repo="LumaKernel/coquille"on_ft="coq"

基本的な使い方

  1. Coqファイル ( .v ) を開きます
  2. :CoqLaunchを実行します
    • もしくは .vimrclet g:coquille_auto_launch=1とかけば自動で .vファイルのときにセットアップします
  3. 自動でInfos/Goals という名前のウィンドウが現れます
  4. 以下のコマンドを使って証明を進めます
  • :CoqNext
  • :CoqBack
  • :CoqToCursor
  • :CoqToLast

CoqIDEみたいな感じで使えます.他にもコマンドはあります.詳しくは :help coquille-commandsを見てください. (まだ日本語のヘルプはないです…)

これらのコマンドは Infos/Goals バッファでも使うことができます.

デフォルトではマッピングは存在しません.

マッピングの例

例えば,以下のように .vimrcに書きます.

function! MyCoqMaps()
  nnoremap <silent><C-C>:CoqLaunch<CR>
  nnoremap <silent><Leader>j:CoqNext<CR>
  nnoremap <silent><Leader>k:CoqBack<CR>
  nnoremap <silent><Leader>l:CoqToCursor<CR>
  nnoremap <silent><Leader>G    :CoqToLast<CR>
  nnoremap <silent><Leader>g:CoqRerun<CR>
  nnoremap <silent><Leader>t:MoveToTop<CR>
  nnoremap <silent><Leader><F5>:CoqRefresh<CR>

  nnoremap <Leader>compute :CoqQuery Compute .<Left>
  nnoremap <Leader>print :CoqQuery Print .<Left>
  nnoremap <Leader>check:CoqQuery Check .<Left>
  nnoremap <Leader>se:CoqQuery Search ().<Left><Left>endfunction

augroup my_coq
  au!auFileType coq :call MyCoqMaps()
augroup END

<buffer> (mapコマンドのオプション) はあってもなくてもいいと思います.

ハイライトの設定

GUIであれば,背景色から自動で計算するので,基本的には大丈夫だとは思います.

以下は,cterm環境で,カラースキーム hybridを使っていることを想定した設定例です.

hi CoqChecked      ctermbg=17hi CoqCheckedAxiom ctermbg=58hi CoqQueued       ctermbg=22hi CoqMarkedWarn   ctermbg=64hi CoqCheckedWarn  ctermbg=64hi CoqMarkedError  ctermbg=160hi CoqCheckedError ctermbg=160

F.A.Q.

Infos/Goals ウィンドウがごちゃごちゃしちゃった

  1. 必要のない,[Goals],[Infos]みたいな名前のバッファに対して,:bdeleteをします.
    • :CoqStopAllを使えば楽です
  2. :CoqRearrangeを実行します
    • one_windowオプションを特に設定していない場合は,すべての .vファイルでやります

裏で動いてるかもしれないプロセスとか含めてきれいに止めたい

:CoqStopAll

デフォルトでないところにインストールした Coq を使いたい

パスが通っていない場合は,以下のように設定します.

letg:coquille_coq_executable='/c/Coq8.10/bin/coqidetop'

これは Windows で MSYS2 を使っているような状況を想定しています.

詳しくは

もしくは :help coquille


Vimプラグインを書くことに関するあれこれを書くかもしれない


Viewing all articles
Browse latest Browse all 5608

Trending Articles



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