Language: en ja

Vim documentation: pass

main help file
pass.txt                                                      日本語ヘルプ

Version :
Author  : Tsuyoshi CHO <Tsuyoshi.CHO+develop@Gmail.com>
License : MIT license  {{{
    Permission is hereby granted, free of charge, to any person obtaining
    a copy of this software and associated documentation files (the
    "Software"), to deal in the Software without restriction, including
    without limitation the rights to use, copy, modify, merge, publish,
    distribute, sublicense, and/or sell copies of the Software, and to
    permit persons to whom the Software is furnished to do so, subject to
    the following conditions:
    The above copyright notice and this permission notice shall be included
    in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
    OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
    IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
    CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
    TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
    SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
}}}

==============================================================================
目次                                            pass-contents

概要                                            pass-introduction
使い方                                          pass-usage
インタフェース                                  pass-interface
  変数                                            pass-variables
  コマンド                                        pass-commands
  関数                                            pass-functions
  自動コマンド                                    pass-autocommands
TODO                                            pass-todo
更新履歴                                        pass-changelog


==============================================================================
概要                                            pass-introduction

pass は Vim password-store APIを目標としたプラグインです。
  Pass: The Standard Unix Password Manager - https://www.passwordstore.org/
を参照してください。

現在getが使えます。なので emacs の auth-source のように使えます。

最新版:
https://github.com/tsuyoshicho/pass.vim

CtrlPのプラグインとしては ctrlp-pass を参照してください。
Clapのプラグインとしては clap-pass を参照してください。

==============================================================================
使い方                                          pass-usage

パスワード等の読み出しや設定時に利用

 " in vimrc
 " configured at end of vim startup
 call pass#get_startup('g:test_gh_token','Develop/Github')
 call pass#get_startup('g:test_gh_username','Develop/Github','username')

 function! s:test() abort
   let password = pass#get('Service/foobar')
   " ...
 endfunction


プラグインのパスワード等の設定時に利用

 # in plugin setting(dein's toml)
 [[plugins]]
 repo = 'tsuyoshicho/vim-pass'
 depends = ['ctrlp']
 hook_add = '''
   let g:ctrlp_extensions = get(g:, 'ctrlp_extensions', [])
         \ + ['pass']
 '''

 [[plugins]] # https://pixe.la/
 repo = 'mattn/vim-pixela'
 depends = ['open-browser.vim','vim-pass']
 hook_add = '''
   " let g:pixela_username = 'user'
   " let g:pixela_token    = 'token'

   call pass#get_startup('g:pixela_username','Develop/Pixela','username')
   " VimPixela work OK
   call pass#get_startup('g:pixela_token','Develop/Pixela')
   " startup-time countup do not correct work.
   " It work or does not work depending on the processing order of events
 '''

 [[plugins]]
 repo = 'tpope/vim-rhubarb'
 depends = ['vim-fugitive','vim-pass']
 # on_if= 'executable("hub")'
 hook_add = '''
   call pass#get_startup('g:RHUBARB_TOKEN','Develop/Github')
 '''

 [[plugins]]
 repo = 'kyoh86/vim-docbase'
 depends = ['vim-pass']
 hook_add = '''
   let g:docbase = []
   call pass#get_startup_funcall(
         \ { v ->
         \ add(g:docbase,
         \   {
         \     'domain': 'example1',
         \     'token' : v
         \   }
         \  )
         \ },
         \ 'Develop/DocBase1'
         \)
   call pass#get_startup_funcall(
         \ { v ->
         \ add(g:docbase,
         \   {
         \     'domain': 'example2',
         \     'token' : v
         \   }
         \  )
         \ },
         \ 'Develop/DocBase2'
         \)
 '''

 [[plugins]] # Slack
 repo = 'mizukmb/slackstatus.vim'
 depends = ['webapi-vim','vim-pass']
 hook_add = '''
   " let g:slackstatus_token = '<YOUR_SLACK_TOKEN>'
   " my hoge
   call pass#get_startup('g:slackstatus_token','Message/Slack/myhoge.legacy')
   " vim-jp
   " call pass#get_startup('g:slackstatus_token',
   "      \                'Message/Slack/vim-jp.legacy')

   function! s:slack_list(A,L,P) abort
     let slacklist = ['myhoge','vim-jp']
     return slacklist
   endfunction

   function s:slackstatus_change_token(team) abort
     let path = 'Message/Slack/' . a:team . '.legacy'
     let g:slackstatus_token = pass#get(path)
   endfunction

   command! -nargs=1 -complete=customlist,<SID>slack_list
      \ SlackStatusChange :call <SID>slackstatus_change_token(<f-args>)
 '''

 [[plugins]] # Mastodon
 repo = 'mattn/vim-mastodon'
 depends = ['webapi-vim','vim-pass']
 hook_add = '''
   " mstdn.jp
   " let g:mastodon_host = 'mstdn.jp'
   " call pass#get_startup('g:mastodon_access_token',
   "      \                'Message/Mastodon/mstdn.jp')

   function! s:mastodon_completion(A,L,P) abort
     let host_list = ['mstdn.jp']
     return join(host_list,"\n")
   endfunction

   function s:mastodon_change_hosttoken(host) abort
     let path = 'Message/Mastodon/' . a:host
     let g:mastodon_host = a:host
     let g:mastodon_access_token = pass#get(path)
   endfunction

   command! -nargs=1 -complete=custom,<SID>mastodon_completion
      \ MastodonHostChange :call <SID>mastodon_change_hosttoken(<f-args>)
 '''


==============================================================================
インターフェイス                                pass-interface

------------------------------------------------------------------------------
変数                                              pass-variables

g:pass_store_path                                   g:pass_store_path
        既定値: "~/.password-store"

password-store形式のデータの格納位置です。

g:pass_gpg_path                                     g:pass_gpg_path
        既定値: "gpg"

gpg(gnupg)実行ファイルのパスです。
単純にはコマンドだけ書けばよいです。

g:pass_use_agent                                    g:pass_use_agent
        既定値:
                0 (SSH接続 あるいは 非Windows/MacでGUIがないシステム)
                1 (それ以外)

gpg-agentが利用できるか/利用するかの設定です。
1でgpg-agentのpinentryでのパスフレーズ問い合せ、0でvim上での問い合せになります。

リモートや非GUI環境でgpg-agentが使える場合、以下のようなシェルスクリプトが便利
です:
        !/bin/bash
        vim_with_gpg_check () {
          local result=0
          # Run test decoding and use gpg-agent
          local output=$(<gpg password-store decode test using same key>) || result=$?
          if [[ "$result" == "0" ]]; then
            export VIM_PASS_AGENT=1
          else
            export VIM_PASS_AGENT=0
          fi

          # run vim
          vim "$@"

          # delete environment variable
          export -n VIM_PASS_AGENT
        }

        if type vim_with_gpg_check &>/dev/null; then
          alias vim='vim_with_gpg_check'
        fi


その値を受け取る Vim script は以下になります:
        " Check gpg-agent support
        if exists('$VIM_PASS_AGENT')
            " When '1', using agent enabled
            let g:pass_use_agent = ($VIM_PASS_AGENT ==? '1') ? 1 : 0
        endif


シェルスクリプトを使うのは、プラグインはVimの中から gpg-agent へパスフレーズを
渡せないためです。事前に pinentry-curses などで gpg-agent のパスフレーズ入力を
すると、他の操作でも利用されます。

g:pass_entry_altmap                                 g:pass_entry_altmap
        既定値:
  {
  \ 'password' : ['password', 'secret'],
  \ 'username' : ['user', 'username', 'id', 'account'],
  \ 'host'     : ['host', 'url',      'uri'          ],
  \},


エントリの代替名の辞書 Dictionary でキーはラベル、値はリスト List で、代替
名のリストになっています。"password" は特別な項目のラベルで、デフォルトのパス
ワード情報を指します。"password" ラベルは、内部デフォルト値を使います。"otp"
は特別な項目のラベルで、OTP用パラメータ専用です、代替名などはありません。また、
g:pass_entry_altmap をスクリプトロード前に定義したときは上記設定を追加して動作
します。

------------------------------------------------------------------------------
コマンド                                          pass-commands

:PassGet {entry} ...                                :PassGet

パスワード確認コマンドです、引数にpassword-storeのエントリを入力してください。
引数を必要とし、{entry}<tab>で自動補完できます。

:PassGetOtp {entry} ...                             :PassGetOtp

OTP値確認コマンドです、引数にpassword-storeのエントリを入力してください。引数
を必要とし、{entry}<tab>で自動補完できます。

:PassGetRegister {entry} ...                        :PassGetRegister

パスワードのレジスタ格納コマンドです、引数にpassword-storeのエントリを入力して
ください。現在限定的に無名レジスタへの永続的なコピーが動きます。引数を必要と
し、{entry}<tab>で自動補完できます。

:PassGetOtpRegister {entry} ...                     :PassGetOtpRegister

OTP値のレジスタ格納コマンドです、引数にpassword-storeのエントリを入力してくだ
さい。現在限定的に無名レジスタへの永続的なコピーが動きます。引数を必要とし、
{entry}<tab>で自動補完できます。

------------------------------------------------------------------------------
関数                                              pass-functions

pass#get({entry}, {...})                            pass#get()

パスワード取得API、戻り値に値を返します。
entryはpassword-storeのエントリ形式。
オプションでパスワード以外の項目を指定できます。

pass#get_otp({entry})                               pass#get_otp()

パスワード取得API、戻り値にOTP値を返します。
entryはpassword-storeのエントリ形式。

pass#get_register({entry}, {...})                   pass#get_register()

パスワード取得API、レジスタに値を設定します。
entryはpassword-storeのエントリ形式。
オプションでパスワード以外の項目を指定できます。
限定的に動作し、無名レジスタへコピーします。
{まだ動作しません。}
時間経過でレジスタから消える予定。

pass#get_otp_register({entry})                      pass#get_otp_register()

パスワード取得API、レジスタにOTP値を設定します。
entryはpassword-storeのエントリ形式。
オプションでパスワード以外の項目を指定できます。
限定的に動作し、無名レジスタへコピーします。
{まだ動作しません。}
時間経過でレジスタから消える予定。

                                                   pass#get_startup()
pass#get_startup({set-variable},{entry}, {...})

パスワード取得API、起動時前専用で、set-variableに値を設定します。
entryはpassword-storeのエントリ形式。
オプションでパスワード以外の項目を指定できます。
set-variableはスコープ付きの変数を表す文字列です(ex. 'g:hoge_fuga')
Note: StartUp API はオートロード関数で、他のプラグインのsource前から使えます
(autoloadの動的読み込み機能を使って対応)。

                                                    pass#get_startup_scope()
pass#get_startup_scope({scope},{set-variable},{entry}, {...})

パスワード取得API、起動時前専用で、set-variableに値を設定します。
entryはpassword-storeのエントリ形式。
オプションでパスワード以外の項目を指定できます。
scopeには get() と同じように、g:やw:などのスコープを設定します。
set-variableはスコープなしの変数を表す文字列です(ex. 'hoge_fuga')
Note: StartUp API はオートロード関数で、他のプラグインのsource前から使えます
(autoloadの動的読み込み機能を使って対応)。

                                                    pass#get_startup_funcall()
pass#get_startup_funcall({funcref},{entry}, {...})

パスワード取得API、起動時前専用で、値付きで{funcref}を呼びます。
entryはpassword-storeのエントリ形式。
オプションでパスワード以外の項目を指定できます。
解決したパスワードを引数として、{funcref}を実行します。
Note: StartUp API はオートロード関数で、他のプラグインのsource前から使えます
(autoloadの動的読み込み機能を使って対応)。

pass#resolve_startup()                              pass#resolve_startup()

------------------------------------------------------------------------------
自動コマンド                                      pass-autocommands

User VimPassStartUpResolve                          VimPassStartUpResolve

処理された pass#resolve_startup() が完了したときにイベントを呼び出します(複
数)。

==============================================================================
TODO                                            pass-todo

* PassGetRegisterの実装
* set系の実装

==============================================================================
更新履歴                                        pass-changelog

see git log

==============================================================================
vim:tw=78:fo=tcq2mM:ts=8:ft=help:norl:noet:

top - main help file - tag index
Language: en ja