:messages
で表示される内容をもっと簡単にバッファに出力して、文字列をコピーしたり編集したりしたい。
command! PutMessage call s:put_message() function! s:put_message() :enew :put =execute('messages') :setf vim endfunction
実行したいとき
:PutMessage
:messages
で表示される内容をもっと簡単にバッファに出力して、文字列をコピーしたり編集したりしたい。
command! PutMessage call s:put_message() function! s:put_message() :enew :put =execute('messages') :setf vim endfunction
実行したいとき
:PutMessage
set backupcopy=yes
'backupcopy' 'bkc' 文字列 (UnixでのViの既定値: "yes"、それ以外: "auto") グローバル/バッファについてローカル |global-local| ファイルの書き込みをしてバックアップが作られるとき、その方法をこのオプ ションで指定する。このオプションはコンマで区切られた単語のリストである。 主な値は次の通り: "yes" 先にファイルのコピーを作ってバックアップにして、更新した内容は 元のファイルに上書きする "no" 先に元のファイルをリネームしてバックアップにして、更新した内容 は新しいファイルに書き出す "auto" どちらか適切な方を選ぶ
:message
で見るのだけど、Vim script のデバッグ時などに見やすいように。
command! PutMessage call s:put_message() function! s:put_message() :enew :put =execute('messages') :setf vim endfunction
新しい端末にVim をセットアップしたのだけど、Ctrl+W
で消せなくなっててなんでかなぁと思いつつ設定。
同じ設定を読み込んでいるはずなので不思議だけど調べるのもだるいので設定して終わり。
set backspace=indent,eol,start
いままで任意のフォルダ配下を全読みするように runtimepath を設定していたけど vim-plug を使うようにしてみた。ついでに vimrc の大掃除をしてみたけど思ったほど消えない。plugin ごとに設定ファイルを分けるようには元々していたので
if !has_key(g:plugs, 'asyncomplete.vim') finish end
のようにすれば plugin を使ってない場合に読み込まれないようにできたので便利。unite.vim の代替を探し始めてみたけど、unite.vim の plugin を含めて手に馴染みすぎて見つけられる気がしないので当分使う予定 (これも fork したちょっと古い版に手を入れたもの)。
ずっと neocomplete をfork して一部いじったものを使っていて、不満は無くはないけど使えてるのでまあいいかで今まで来たのだけど試しに乗り換えを試みてみる。第一候補の asyncomplete.vim を触ってみると autopopup はいいのだけど、enter 押したら第一候補を確定してほしいけどしてくれないとか、ポップアップメニューのチラツキが多いのが気になるとかあって久々に Vim script してみた。
inoremap <expr> <cr> pumvisible() ? <SID>decide() : "\<cr>" function! s:decide() return "\<C-n>\<C-c>a" endfunction let s:min_chars = 2 let s:popup_delay = 200 augroup MyAllAsyncompleteStting autocmd! autocmd BufEnter * call s:all_settings() augroup END let s:settings = { \ 'html' : {'min_chars': 2, 'popup_delay': 50}, \} function! s:all_settings() let setting = {'min_chars': s:min_chars, 'popup_delay': s:popup_delay} if has_key(s:settings, &filetype) let setting = s:settings[&filetype] end let g:asyncomplete_min_chars = setting.min_chars let g:asyncomplete_popup_delay = setting.popup_delay endfunction let s:before = {'len': 0, 'word': ''} function! s:my_asyncomplete_preprocessor(options, matches) abort let l:visited = {} let l:items = [] for [l:source_name, l:matches] in items(a:matches) let l:startcol = l:matches['startcol'] let l:base = a:options['typed'][l:startcol - 1:] for l:item in l:matches['items'] for l:item in matchfuzzypos(l:matches['items'], l:base, {'key':'word'})[0] if has_key(l:visited, l:item.word) continue end call add(l:items, s:strip_pair_characters(l:base, l:item)) let l:visited[l:item.word] = 1 endfor endfor endfor if len(l:items) == 0 call asyncomplete#preprocess_complete(a:options, l:items) let s:before = {'len': 0, 'word': ''} return end if s:before.len != len(l:items) && s:before.word != l:items[0].word call asyncomplete#preprocess_complete(a:options, l:items) endif let s:before = {'len': len(l:items), "word": l:items[0].word} endfunction let s:pair = { \ '"': '"', \ '''': '''', \} function! s:strip_pair_characters(base, item) abort " Strip pair characters. If pre-typed text is '"', candidates " should have '"' suffix. let l:item = a:item if has_key(s:pair, a:base[0]) let [l:lhs, l:rhs, l:str] = [a:base[0], s:pair[a:base[0]], l:item['word']] if len(l:str) > 1 && l:str[0] ==# l:lhs && l:str[-1:] ==# l:rhs let l:item = extend({}, l:item) let l:item['word'] = l:str[:-2] endif endif return l:item endfunction let g:asyncomplete_preprocessor = [function('s:my_asyncomplete_preprocessor')] call asyncomplete#register_source(asyncomplete#sources#buffer#get_source_options({ \ 'name': 'buffer', \ 'allowlist': ['ruby', 'html'], \ 'blocklist': [], \ 'completor': function('asyncomplete#sources#buffer#completor'), \ 'config': { \ 'max_buffer_size': 5000000, \ }, \ })) call asyncomplete#register_source(asyncomplete#sources#file#get_source_options({ \ 'name': 'file', \ 'allowlist': ['*'], \ 'priority': 10, \ 'completor': function('asyncomplete#sources#file#completor') \ })) call asyncomplete#register_source(asyncomplete#sources#neosnippet#get_source_options({ \ 'name': 'neosnippet', \ 'allowlist': ['*'], \ 'blocklist': [], \ 'priority': 100, \ 'completor': function('asyncomplete#sources#neosnippet#completor'), \ }))
自分向けにいい感じなったとも言えるが・・・様子を見てみる。
VimConf 2017 - An international Vim Conference
勉強会やカンファレンスへの参加が久しぶり。さらに久々の TweetVimUserStream を発動。vimconf のタイムラインは vim で見る ( ー`дー´)キリッ 。通常のストリームに vimconf の検索結果をひっかけて表示。発言するときにはタグを最初から入れておく。便利だと思うんだけど使ってる僕ぐらいだと思われ。
:let g:tweetvim_appendix = " #vimconf2017" :TweetVimUserStream vimconf
11 時ぐらいに一回 Vim を立ち上げなおして 15 時すぎに 2000 行に達したあたりで json の decode に失敗するエラーがでて vim を再起動。原因は・・・調べるのがだるかったのでスルー。デバッグ機能を入れるべきか。
プログラミング始めて 5 年でアウトプットしまくって某社に入るのすごい。見習いたい。 easymotion 便利という話はよく聞くけど使い方というか、どういうものなのか今までよく知らなかった (実は)。ちょっと触ってみようと思う。clever-f は分かりやすいから人気があるのかなと思った。
Diversity of Vim community - Type of Vim users の絵が良すぎてセンスを感じる。
Love that slide from @haya14busa #vimconf2017 talk https://t.co/GqCbH5S83I pic.twitter.com/kbxEo1N4Rx
— Benoit Tigeot (@Benoit_Tgt) 2017年11月4日
go は 6 年ぐらいに前に勉強を始めてイイじゃん!と思ったものの、僕には ruby で事足りるわ・・・とうとうの事情により中断してそのままになってた。最近再開したので vim-go を使い始める。便利。Github で 7400 スターが付いていて donation が $200/月。これが多いと取るか少ないと取るかは人それぞれだと思うけど、ありがたく使わせてもらう。英語が聞き取りやすかった。
mattn さんが "死ぬまで patch を書く。他のエディタを使っているのは vim にフィードバックするため" と言ってたのはカッコよかったなぁ。
人生の 1/3 が colorscheme の時間だった
日頃、仕事で使っている Visual Studio では ViEmu を使っていて気になる所はあるものの概ね満足している状態では有るのだけど・・・Visual Studio でもうごかないかなぁ・・・せめて VsCode で、とは思う。
posix 原理主義
neocomplcache からお世話になっているのだけど、necomplete の開発が終了。特に解決できない大きな問題が発生しなければこのまま継続して使うと思う。untie.vim も古いバージョンを使ってたりする。
blog を読み返してみると 2009 年 5 月にインストールしたけど set paste
してて動かないのに気が付かず、9 月になってようやく解決となっていた。仕事等でも色々便利に使って今に至るので 8 年ぐらい経ってた。
運用で回避というパワーワード。サラッと結構な数のパッチを送っていて驚いた。すごいなぁ。 これが vim を使ってたら結婚して家建てて転職したパワーか。
:synmaxcol
の default が 3000 で、それをこえるとハイライトしないようにするの知らなかった。
iro.vim
こだわり感あっていい。
くっそ便利そうだけど仕事では Visual Studio + git for windows な環境なので常用は難しいかなぁ。なんだかんだでコマンドをいろいろ発行したり状態を見たりするし、コマンドの扱いがバグってなんかあったら嫌だなぁとか思ってしまって踏み込めない。
以前に vim-gita の発表も見たけど勢いがあっていい。
C-d
C-u
j
k
で移動できなかった。ここ数ヶ月仕事が忙しくてどんより腐ってる状態だったけど上向きになる良い機会だったと思います。スピーカーの皆さん、スタッフの皆さんありがとうございました!
#vimconf2017 あとひとつ。来年の同じ時期の会場の仮予約をしました。 see you again at #vimconf2018 !!!
— MURAOKA Taro (@kaoriya) 2017年11月4日
来年の開催も楽しみだ。