koturnの日記

転職したい社会人1年生の技術系日記

Vim

Vimのあまり使われない機能について~暗号化と印刷~

Vim

はじめに この記事はVim Advent Calendar 2016の15日目の記事です. 今回はVimであまり知られていない,使われていない機能であると思われる暗号化機能について書きたいと思います. 暗号化機能 Vimはテキストエディタですが,単なるテキストエディットだけ…

denite.nvimのsourceを作ってみる

はじめに unite.vim に替わる新しいプラグインとして,denite.nvimが開発されている. まだまだ開発途上ではあるものの,じわじわとunite.vimから移行する人が見受けられる. denite.nvimはneovimだけでなく,Vim 8.0以降であれば利用可能であるのも魅力の1…

Osaka.vim #8 に行ってきた

はじめに 昨日,10/29(土)にOsaka.vim #8に行ってきました. 前回は大学の後輩を誘って参加しましたが,今回は都合が悪かったので参加できず...残念. やったこと denite.nvimの勉強 最初はShougo/denite.nvimについて勉強するかーと思って,denite.nvimの…

Windowsでneovimを使う(改訂版1)

はじめに 前回の記事(約1年前1)でWindowsでneovimを使う方法について書いた. しかし,約1年も経過すれば,色々と変化はあり,前回の記事内容そのままというわけにはいかない. 「Windows neovim」でググると,僕の記事が一番上に出てくるというのもあり,…

Osaka.vim #7に行ってきた

Vim

はじめに 参加感想記事なので,今回は「ですます調」で書きます. 2ヶ月遅れの参加記事執筆となりますが,7月2日にOsaka.vimに行ってきました. 7回目のOsaka.vimだったわけですが,6回目の参加でした. ちなみに,Osaka.vimの参加記事を書くのは今回が初め…

Dein.vim で NeoBundleList と同様のことをする

Vim

はじめに 発端はこの会話. @koturn deinでNeoBundleListに相当する関数ってわかりますか?— ちゃっく (@chakku_000) 2016年8月21日 この質問を受け,dein.vimにおいて, :NeoBundleList に相当する関数を探したが,直接的に該当するものはなかった. しかし…

候補絞り込み型インターフェースを提供するプラグインについて

Vim

この記事は Vim Advent calendar 2015 の16日目の記事です. 僕は普段「だ・である」調でブログを書いていますが,今回の記事は多数の人に見ていただくことを考慮して,多くの人がブログで採用している「です・ます」調,語り口調で書いていくことにしましょ…

Cygwinでclipboard機能を有効にしたVimをビルドする

はじめに 昔のCygwinのVimではクリップボードが利用できず,Cygwinで用意されているクリップボードデバイス /dev/clipboard に対し,読み書きを行うことや, getclip , putclip コマンドを利用することで,クリップボードとのやりとりを行っていた. kanaさ…

Vimからfzfを利用する

Vim

はじめに fzfとは,percolやpecoと同様,絞り込みの検索を行うことのできるコマンドラインツールである. 日本では,percolやpecoが有名で,fzfはあまり有名ではないが,海外では有名であるらしい. fzfはVimから利用できるように,公式のリポジトリにAPIを…

ctrlp.vimのエクステンションの作り方

Vim

はじめに この記事はctrlpvim/ctrlp.vimのエクステンションの作り方についての記事であり,ctrlpの公式リポジトリのextensionsブランチに書かれているエクステンションの作り方,および以下の3つの記事の内容に個人的な知見を追加したものである. Vimプラグ…

Windowsでneovimを使う

注意(2016/10/18 追記) この記事の情報は古くなっているので、新しい記事を参照してください. 前書き 僕自身,neovim自体にはあまり注目していなかった人間であるが,neovimが頑張ってるっぽく,かなり話題を耳にするようになったので,敢えてWindowsでne…

NeoBundleの使い方

Vim

他人の.vimrcを見ていると,NeoBundleを用いてプラグインの管理をしている人が多い. かくいう僕もその一人である. しかし,NeoBundleの事情に詳しくない人は,どうも古い情報を参照しているため,以下のような古い仕様のNeoBundleに沿った記述や,そもそも…

memolist.vimの遅延読み込み設定

Vim

glidenote/memolist.vimというメモを取るためのVimプラグインがある, Shougo/neobundle.vimでこのプラグインを管理し,遅延読み込み設定を行った. NeoBundleLazy 'glidenote/memolist.vim', { \ 'autoload': {'commands': ['MemoGrep', 'MemoList', 'MemoN…

Vimで<C-c>を含むマッピングをするときに注意すること

Vim

前書き まずは,簡単な説明をする. $ vim -u NONE としてvimを立ち上げて, :nnoremap :<C-u>a<C-c>echo 'Hello World!'<CR> のようにマッピングしてみよう. そして,ノーマルモードにて, a<C-c> と入力すると, Hello World! とエコーされず, Type :quit<Enter> to exit Vim と表</enter></c-c></cr></c-c></c-u>…

VimでUndo履歴を消去する

Vim

:help clear-undo を見ると, let old_undolevels = &undolevels set undolevels=-1 exe "normal a \<BS>\<Esc>" let &undolevels = old_undolevels unlet old_undolevels とすれば,undo履歴が消去できるとのこと. しかし,コマンド normal は,マッピングを展開す</esc></bs>…

Vimでルートユーザとして保存する

Vim

rootユーザでVimを起動したり, sudoedit でVimを起動しなかった場合,権限の無いファイルを編集後,保存しようとしても保存できない. 割とあるあるなことだと思う. (特にVimに閉じこもる人にとっては) そんなとき, :w !sudo tee > /dev/null % と実行…

NeoBundleLazyのautoloadのcommands指定で頑張った話

Vim

neobundle.vimには,遅延読み込み機能があり,適切に設定してやることで,プラグインの使用感はそのままで,Vimの起動時間を短縮することができる. autoloadの設定には, ファイルタイプ検出時 filetypes ファイル名検出時 filename_patterns コマンド実行…

Vimに自殺させる

Vim

Vim力を上げるために,過去のvimrc読書会のログを見ていたときに,次のコマンドを発見した. command! Suicide call system('kill -KILL ' . getpid()) Vimは自分自身のPIDを getpid() 関数で取得できる. そうして取得した自身のPIDに対して kill コマンド…

Vimのmessages履歴について

Vim

Vimで :messages とコマンドを実行すると, :echomsg と :echoerr から出力されたメッセージ履歴を閲覧することができる. :help :messages によると,tinyバージョンであれば,過去のメッセージを20行,それ以外だと200行閲覧することができる. しかし,最…

Vimのサーバー機能でタイマーを実現する

Vim

Vimのあまり知られていない(?)機能として,サーバー機能がある. この機能を用いると,他に立ち上げているVimとやりとりすることができる. ただし, +clientserver でコンパイルされていないと,利用することはできない. このサーバー機能を活かして,…

Vimのrange指定した関数を呼び出したときにハマッたこと

Vim

.vimrcに昔記述した,カーソルを移動せず,ファイルの全ての行末のホワイトスペースを消去するコマンドを,範囲指定できるように書き直したときにハマった話をする. 以下のコマンドを, function! s:delete_trailing_whitespace() abort let cursor = getcu…

Vimで編集中のファイルを(ほぼ)2度と編集できなくする

Vim

最初に言っておくが,この記事は単なるジョーク記事である. Vimには暗号化を行う機能がある. :help 'cryptmethod' や :help :X , :help 'key' あたりを参照してもらえばよくわかるはずだ. まず,カレントバッファにて, :X というコマンドを実行してほし…

VimでJsonを整形したい

Vim

jqという非常に便利なコマンドラインツールがある. これは,jsonの整形を行うものだ. jqコマンド自体については,公式のマニュアルや以下の記事を参考にすればよくわかるだろう. jq コマンドを使う日常のご紹介 - Qiita 軽量JSONパーサー『jq』のドキュメ…

VimでC言語のソースコードを整形したい

VimでC/C++のソースコードを整形するには,rhysd/vim-clang-formatというVimプラグインを用いるのが一番良い. 作者の紹介記事からも,便利さが伝わるはずだ. しかし,この記事では敢えてVimからindentコマンドを用いて,C言語のソースコードを整形すること…

シェル上で普通の言語のようにVim scriptを実行したい

Vim

元ネタはWandboxにVim scriptが追加されたことである. Wandboxが実行するコマンドラインをパクれば,シェル上でVim scriptが実行できそうだと考えた. ただ,オプションの数が多く,いちいち打ち込むのは面倒なので,シェルスクリプトとバッチファイルを作…

Vim scriptのinputlist()で<Esc>を検出する方法

Vim

以前書いた記事:Vim scriptのinput()で<Esc>を検出する方法にて,inputlist()で<Esc>を検知できない(数値0の入力と区別できない)と書いた. しかし,改めて考えてみると,inputlist()をgetchar()を用いて再実装すれば,簡単に<Esc>を検知できるinputlist()ができあがると</esc></esc></esc>…

Vimを起動している時間を計測したい

Vim

僕は頻繁にVimを終了しているわけではない. ある程度Vimに閉じこもり,必要に応じてシェルに移動したりする. 簡易な処理ならば,vimshell.vimで済ませることも多い. また,Vimを起動したままPCをスリープさせることもよくある. tmuxの1つのペインでVimを…

Vimプラグインの動作確認をしたい

Vim

Vimプラグインを書いていると,新規にVimを起動して,動作を確認したいことがある. そこで,c0hamaさんのこの記事を参考にして,.vimrcに function! s:plugin_test(use_gvim, ex_command) abort let cmd = a:use_gvim ? 'gvim' : 'vim' let ex_command = em…

Vim scriptにおける関数のコピーと削除

Vim

実用的ではない小ネタを紹介しようと思う. それは,Vim Scriptにおける関数のコピーとリネームである. Vimでは,function [関数名]というコマンドを実行することで,関数の定義を行番号付きで見ることができる. 従って,これをredirすれば関数定義を文字…

Vimで実行に失敗したら,自身を削除するコマンドを定義する

Vim

自作のVimプラグインで,ctrlp.vimの拡張を作成したとき,plugin/hoge.vimにて, command! CtrlPHoge call ctrlp#init(ctrlp#hoge#id()) のような定義をする. しかし,ctrlp.vimの拡張はオプショナルであり,必須ではない. ユーザの中には,CtrlPを導入し…

Vimで作成する新規ファイルのパーミッションを自動的に変更する

Vim

僕はWindowsを用いる場合,KaoriYaのgvimと,Cygwinのvimを用いている. そして,Cygwinのgitを利用している. Cygwinであれば,新規に作成されるファイルのパーミッションは644であるが,Windowsだとパーミッションが700となるのが気にくわなかった. とい…

Vim scriptのinput()で<Esc>を検出する方法

Vim

Vimプラグインを作っているときに,input()で<Esc>キーを感知できればいいなと思ったのがきっかけである. どうやら,ここに書いてあるinput()のラッパー関数を使えばOKのようだ. function! s:input(...) abort new cnoremap <buffer> <Esc> __CANCELED__<CR> let ret = call('inp</cr></esc></buffer></esc>…

Cygwinのvimを快適に使う

今日は、Cygwinのvimについて書いてみようと思う。 内容としては、以下の4点である。 1. 使用ターミナルによる挙動の違い 1-1. minttyとコマンドプロンプト 1-2. Terminal type(オプション:termの値)による違い 2. Altキーと併用するキーバインド 3. 挿入モ…

Vimからのvimdiffを便利にしたい

Vim

Vimには、vimdiffという機能がある。 これは、Vim上でファイルの差分を確認するものだ。 vimdiffの利点は、 vimでファイルの差分を確認できる 差分をハイライト表示しており、視覚的で見やすい 比較ファイルのスクロールが協調して動作する といったものがあ…

WindowsのコマンドプロンプトでVimを使う

Vim

私はWindowsユーザであり、WindowsでもVimを使う。 しかし、WindowsのコマンドプロンプトでVimを使うのは、どうにも不便だと感じていた。 というのも、コマンドプロンプトのサイズの変更が面倒だからであろう。しかし、 set lines set columns で値を指定す…

NeoBundleのインサートモード時遅延読み込みの注意点

Vim

この前、Gistに投稿した記事だが、どうせなので、はてなの方にも投稿しておこうと思う。 元はこちら:https://gist.github.com/koturn/5929673 NeoBundleでインサートモード時に遅延読み込みすると、インサートモード時にステータスラインの色を変更するとい…