https://github.com/tsuyoshicho/vim-pass
Vim password-store API
https://github.com/tsuyoshicho/vim-pass
2fa ctrlp gpg otp pass password vim vim-clap
Last synced: 5 months ago
JSON representation
Vim password-store API
- Host: GitHub
- URL: https://github.com/tsuyoshicho/vim-pass
- Owner: tsuyoshicho
- License: mit
- Created: 2019-02-28T09:11:05.000Z (almost 7 years ago)
- Default Branch: master
- Last Pushed: 2025-09-13T03:06:08.000Z (6 months ago)
- Last Synced: 2025-09-13T04:17:37.609Z (6 months ago)
- Topics: 2fa, ctrlp, gpg, otp, pass, password, vim, vim-clap
- Language: Vim Script
- Homepage: https://tsuyoshicho.github.io/vim-pass/
- Size: 403 KB
- Stars: 4
- Watchers: 2
- Forks: 0
- Open Issues: 10
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
Awesome Lists containing this project
README
# vim-pass
[](https://github.com/vim-jp/vital.vim) [](https://github.com/tsuyoshicho/vital-codec)
[](https://deepwiki.com/tsuyoshicho/vim-pass)
Vim password-store API.
see [Pass: The Standard Unix Password Manager](https://www.passwordstore.org/)
Currenlty *get* support. usable like `auth-source` at emacs.
## Feature
* "Pass" style data get / get_startup (and other variant) support.
* [ctrlp.vim](https://github.com/ctrlpvim/ctrlp.vim) plugin : selection support.
* `` : only copy to register
* `` : put before cursor, 'P'
* `` : put after cursor, 'p'
* [vim-clap](https://github.com/liuchengxu/vim-clap) plugin : selection support.
* only work put like 'gP'.
* Limited support OTP(HOTP).
## Require
* gpg
* agent configuired as loopback enable
* password-store like saved data
* ctrlp.vim plugin
* if use selection feature.
* vim-clap plugin
* if use selection feature.
## Installation
```vim
dein#add('tsuyoshicho/vim-pass')
if dein#tap('ctrlp') && dein#tap('vim-pass')
let g:ctrlp_extensions = get(g:, 'ctrlp_extensions', [])
\ + ['pass']
endif
```
or
```toml
[[plugins]]
repo = 'tsuyoshicho/vim-pass'
depends = ['ctrlp.vim','vim-clap']
hook_add = '''
let g:ctrlp_extensions = get(g:, 'ctrlp_extensions', [])
\ + ['pass']
'''
```
## Usage
```vim
" 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! test() abort
let password = pass#get('Service/foobar')
" ...
endfunction
```
```toml
# in plugin setting(dein's toml)
[[plugins]]
repo = 'tsuyoshicho/vim-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 = ''
" 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,slack_list SlackStatusChange :call slackstatus_change_token()
'''
[[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,mastodon_completion MastodonHostChange :call mastodon_change_hosttoken()
'''
```
## limitation
* Currently support API:get(default password/entry select) only
* Entry select require exact match
* When plugin's variable configure at load/starup time,sometimes it works not correctly like above Pixela startup-time countup
* some environment, need `g:pass_use_agent` set as 0 manually (ssh connect cli and non-X11 are automatic set to 0).