かどうかはわかりませんが、techrachoアドベントカレンダー23日目の記事です
Vimでファイルを編集するようにSlackに発言できたらいいな!
と思ったことはありませんか?
というわけで作ってみました
Slackをファイルのように開けます
https://github.com/yaasita/edit-slack.vim
インストール
パッケージマネージャーでのインストール
適当なパッケージマネージャ等でインストールして下さい
以下一例です
vim-plugな人
Plug 'yaasita/edit-slack.vim'
NeoBundleな人
NeoBundle 'yaasita/edit-slack.vim'
Vundleな人
Plugin 'yaasita/edit-slack.vim'`
Vim packages vim標準のパッケージマネージャな人 (Vim 7.4.1528以降)
git clone https://github.com/yaasita/edit-slack.vim ~/.vim/pack/plugins/start/edit-slack.vim
実行バイナリの配置
その後、edit-slack.vim直下にedit-slackという実行バイナリを置いておきます(Slackとの通信に使います)
お使いの環境に合わせてダウンロードします
Linux
- 64bit: https://github.com/yaasita/edit-slack/releases/download/v0.2.0/linux-amd64-edit-slack
- 32bit: https://github.com/yaasita/edit-slack/releases/download/v0.2.0/linux-386-edit-slack
FreeBSD
- 64bit: https://github.com/yaasita/edit-slack/releases/download/v0.2.0/freebsd-amd64-edit-slack
- 32bit: https://github.com/yaasita/edit-slack/releases/download/v0.2.0/freebsd-386-edit-slack
Windows
- 64bit: https://github.com/yaasita/edit-slack/releases/download/v0.2.0/windows-amd64-edit-slack.exe
- 32bit: https://github.com/yaasita/edit-slack/releases/download/v0.2.0/windows-386-edit-slack.exe
macOS
- 64bit: https://github.com/yaasita/edit-slack/releases/download/v0.2.0/darwin-amd64-edit-slack
- 32bit: https://github.com/yaasita/edit-slack/releases/download/v0.2.0/darwin-386-edit-slack
実行権限の追加
実行権限も付与しておきます
※windowsユーザは edit-slack.exe
という名前にしてください
cd /path/to/install/directory/edit-slack.vim
# download binary
mv linux-amd64-edit-slack edit-slack
chmod +x edit-slack
Slackトークンの取得
slackのAPIページ からトークンを取得します
.vimrcにトークンを追加します
let g:yaasita_slack_token = "xoxp-xxxxxxxxxx-xxxxxxxxxx-xxxxxxxxxx-xxxxxx"
" vimrcにトークン書くの嫌だという方は環境変数から取るとか工夫する感じで
" let g:yaasita_slack_token = $MY_SLACK_TOKEN
文字化けする場合は以下も追加ください
set fileencodings+=utf-8
set encoding=utf-8
Linux + vim-plugインストール例
使い方
ファイル名は以下の規則になってます
チャンネル一覧を開くには以下の様にします
# 順にチャンネル、プライベートグループ、ダイレクトメッセージ
vim slack://ch
vim slack://pg
vim slack://dm
一覧でgfコマンドを使えばカーソル下のチャットを開くことができます
チャットを開く場合は以下のようにします
# general チャンネルを開く
vim slack://ch/general
# プライベートグループ secret を開く
vim slack://pg/secret
# yaasitaさんとのダイレクトメッセージを開く
vim slack://dm/yaasita
書き込む場合は === Message ===
行の下になんか文字を入れて :w
で保存してくれればOKです
vim内から:e
, :tabe
等で開くことも可能です
ユーザーリスト、チャンネルリストをキャッシュしてるので2回目の方が早いですが、
ユーザの追加、チャンネルの追加があった場合はvimを再起動しないと反映しません
これで書き上げたソースコードの感動をすぐ届けられるようになります!
便利ですね(多分)
仕組み
Go言語で書いたものがSlackとの間に入って、Vimにはファイルとして渡しています
(c) gopher stickers
以下の様にautocmdを定義すると、ファイルを開くときの挙動を定義できます
これにより、 slack://で始まるファイル名で開いたとき、保存したときにGoのバイナリをキックするようにしてslackと通信しています
autocmd BufReadCmd slack://* call edit_slack#OpenCh(expand("<amatch>"))
autocmd BufWriteCmd slack://* call edit_slack#WriteCh(expand("<amatch>"))
簡単ですね
まとめ
というわけで、VimのBufReadCmd、BufWriteCmdを使った簡単なslackクライアントを作ってみました
Vim標準プラグインでも同じようなものがあって
vim scp://server_name//path/to/file
でSCP越しに編集できたりvim http://www.google.co.jp/
でHTMLソースを見たりvim hoge.txt.gz
で圧縮されたファイルを直接編集したり
できます
こんな感じで、テキストファイルではないものをテキストファイルの様にVimで編集できるようになります
使い方次第でとても便利になりますので是非活用してみたくださいー
おわり
関連記事
- RubyMineからVimに乗り換えて2年経ちました【BPS Advent Calendar: 12/08】
- vimでちょっとしたワードを調べる時に使うアレ5つ
- Vim部活動日誌
- vim7.4からステータスラインの「RO」が「読専」になる件
- vimでmarkdownプレビューする
- vim日本語検索をちょっと便利にするmigemo検索
- imadesyo(今でしょ!).vimを作りました
- vimのカラースキームを毎日変えてリア充になる方法