Humanity

Edit the world by your favorite way

quickrun.vim でバッファの Prolog コードを実行できるようにした

そういう Pull Request を送ってマージされました。

github.com

述語が多くなってくると REPL で確認するのも面倒になってくるかと思いますが、 そういう時はおもむろに新しいバッファを作って :setf prolog して :QuickRun すると実行した結果が別バッファに出ます。

main :-
  write('hello'),nl,
  write('prolog'),nl,
  % ,halt.    % 明示的に halt してる場合もしてない場合も必ず終了するのでご心配なく (-g halt (SWI) や --query-goal halt (GNU) しているため)
  .
:- initialization(main).

他にも例えば

tyru.hatenablog.com

にあるようなテストコード (test.pl) を :QuickRun するだけで、Vim にいながらテスト結果がわかるので嬉しいです。

Windows Subsystem Linux で動かしてる端末版 Vim のバッファの内容をクリップボードにコピーしたい

ので書いた。 さっと書いた雑クオリティなので GitHub - kana/vim-fakeclip: Vim plugin: Provide pseudo "clipboard" registers 使うのが良いんだと思います。 help ちらっと見たら WSL にも対応してるっぽいので、OS 間で統一して扱いたいとかいう人はそちらをどうぞ。

追記 (2018/09/18):range に対応したのでビジュアルモードで :'<,'>Clip したらその箇所だけコピーされるようになった。これ以上ブログに転載するのも面倒なので最新版はこちらから

let s:is_wsl = has('unix') && isdirectory('/mnt/c/')
if s:is_wsl
  command! -bar -range=% Clip <line1>,<line2>call s:cmd_clip()

  function! s:cmd_clip() range abort
    let windir = s:windir()
    if windir is# ''
      echoerr 'windows directory not found'
      return
    endif
    let clip = join([windir, 'System32', 'clip.exe'], '/')
    let str = join(getline(a:firstline, a:lastline), "\n")
    call system(clip, str)
  endfunction

  function! s:windir() abort
    return get(filter([
    \ '/mnt/c/Windows',
    \ '/mnt/c/WINDOWS',
    \], {_,p -> isdirectory(p)}), 0, '')
  endfunction
endif

Prolog でツリー構造を扱うライブラリ

Prolog 手習いに作ってみた。 使い方はコメントとかテストコードから察してください。 Prolog 初心者なので添削してくれると嬉しいです。 SWI-Prolog (in WSL) で確認しています。

Item++Children みたいな感じでツリー構造を作っていきます。 Item は任意の要素、Children は子ノードのリストです。

gist.github.com