Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all 5720 articles
Browse latest View live

Vimでウィンドウを出るときに明かりを消す

$
0
0

バクダンくんだよ。
最近のVimのアップデートのおかげで簡単に非アクティブウィンドウを暗くすることができたから紹介するよ。

こんなかんじ↓
qiita.gif

解説

Vimでは通常のテキストや背景はNormalハイライトグループが決定しているよ。
ハイライトグループは全ウィンドウで共有なので、今まで通常のテキストや背景は全ウィンドウで同じ色が使われていたけど、最近のアップデート(8.1.1391)でウィンドウごとにNormalの代わりに使うハイライトグループを指定できる'wincolor'オプションが追加されたよ。

'wincolor'は元々ポップアップウィンドウの背景を指定するために作られたオプションっぽいけど、普通のウィンドウでも普通に使えるので、以下のような設定をvimrcに書くだけでカレントウィンドウ以外を暗くすることができちゃうのだ。

" 色はお使いのカラースキームに合わせて変えてちょ
autocmd ColorScheme * highlight NormalNC guifg=#a0a0a0 guibg=#121212
autocmd WinEnter,BufWinEnter * set wincolor=
autocmd WinLeave * set wincolor=NormalNC

みんなも部屋を出るときは明かりを消して節電しよう。

なお

  • terminalウィンドウには効かないよ。
  • ハイライトされている文字の色は変わらないよ。
  • 一応今までも同じようなことを(半ば強引に)実現するプラグイン(vim-diminactive)はあったみたい。
  • NeovimはNormalNCを指定するだけでできちゃうよ。なんだって?

emacs派のためのvimrc

$
0
0

ごめんなさい、そこまでemacs派じゃないです
過去に使っていましたが、長らく使っておらず忘れました
(IDE使ってます)

対象

  • emacs、mac、linuxのキーバインドでvimのカーソル移動をしたい
  • なんらかの事情でvimを扱う必要があるが、vimのキーバインドに慣れない(特にカーソル移動)

vimrcのリマップ

これを~/.vimrcに貼り付ければOK

~/.vimrc
noremap <C-p> <Up>
noremap <C-n> <Down>
noremap <C-b> <Left>
noremap <C-f> <Right>
noremap <C-a> <HOME>
noremap <C-e> <END>
noremap <C-d> <Del>
noremap <C-h> <BS>
noremap <C-k> <Esc>D
noremap <C-u> <Esc>dd

noremap! <C-p> <Up>
noremap! <C-n> <Down>
noremap! <C-b> <Left>
noremap! <C-f> <Right>
noremap! <C-a> <HOME>
noremap! <C-e> <END>
noremap! <C-d> <Del>
noremap! <C-h> <BS>
noremap! <C-k> <Esc>D
noremap! <C-u> <Esc>dd

解説

設定したキーバインド

コマンド動作
ctrl + p1行上にカーソル移動
ctrl + n1行下にカーソル移動
ctrl + f1行右にカーソル移動
ctrl + b1行左にカーソル移動
ctrl + a行の先頭にカーソル移動
ctrl + e行の末尾にカーソル移動
ctrl + dカーソルの右の一文字を削除(delete)
ctrl + hカーソルの左の一文字を削除(back space)
ctrl + kカーソルから行末まで削除
ctrl + u1行削除

※ctrl + kが連続使用できない(とりあえず妥協)
※page up,down系はhhkbのキーバインドで不便していないので省略

vimのマッピング

どうやらvimにはノーマル、ビジュアル、選択、オペレータ待機、挿入、コマンドラインなどのモードがあるようだ
noremapとnoremap!で大体カバーできるみたいなので、容赦なくリマップする

コマンド                    モード
:map   :noremap  :unmap     ノーマル、ビジュアル、選択、オペレータ待機
:nmap  :nnoremap :nunmap    ノーマル
:vmap  :vnoremap :vunmap    ビジュアル、選択
:smap  :snoremap :sunmap    選択
:xmap  :xnoremap :xunmap    ビジュアル
:omap  :onoremap :ounmap    オペレータ待機
:map!  :noremap! :unmap!    挿入、コマンドライン
:imap  :inoremap :iunmap    挿入
:lmap  :lnoremap :lunmap    挿入、コマンドライン、Lang-Arg
:cmap  :cnoremap :cunmap    コマンドライン
:tmap  :tnoremap :tunmap    端末ジョブ

参考
https://vim-jp.org/vimdoc-ja/map.html#map-overview

さいごに

いろんなサーバに入ることが多いのですが、emacsは当然入っていません。
コーディングはIDEで行っているので、最低限のカーソル移動系のキーバインドだけどうにかしたいと思い設定しました。

本当のemacs派の人には物足りない設定になっているでしょうが、そこはすみません
(追記したほうがいいものがあれば教えてください)

Vimで電車乗り換えルート検索

$
0
0

こんにちは
ゴリラ.vimを運営しているゴリラです。

Vimでコーディング中に帰りの電車時間を知りたくなる時があるので、プラグイン作りました。
このプラグインを入れればブラウザを開くことなく乗り換えルートを検索できます。便利です。

何ができる?

Yahoo乗り換え案内

電車遅延情報

導入

https://github.com/skanehira/train.vim
READMEを参照して下さい。

使い方

  • 乗り換え
    :TrainSearchRoute 出発駅 到着駅

  • 電車遅延情報
    :TrainLateInfo

仕組み

vital.vimというvimのライブラリのWeb.HTMLを使用してYahoo乗り換え案内のHTMLのパースをしています。

letl:url ='https://transit.yahoo.co.jp/search/result?flatlon=&fromgid=&from='..l:from ..'&tlatlon=&togid=&to='..l:to..'&viacode=&via=&viacode=&via=&viacode=&via=&type=1&ticket=ic&expkind=1&ws=3&s=0&al=1&shin=1&ex=1&hb=1&lb=1&sr=1&kw='..l:toletl:response =s:HTML.parseURL(l:url)" 以降パース処理for ul inl:response.findAll('ul')for li in ul.findAll('li')letdl= li.find('dl')if!empty(dl)let dd =dl.find('dd')if!empty(dd)let ul = dd.find('ul')...

電車遅延情報はAPIがあるので、Web.HTTPを使用してJSONを取得し、vim組み込み関数のjson_decode()でJSONをオブジェクトに変換してテーブルデータを作成しています。

letl:response =s:HTTP.get("https://rti-giken.jp/fhc/api/train_tetsudo/delay.json")ifl:response.status !=200
    echohl ErrorMsg
    echo 'status:'..l:response.status 'response:'..l:response.content
    echohl None
    returnendifletl:table =s:TABLE.new({            \'columns':[{},{},{}],            \'header':['路線名','鉄道','更新時間']            \})letl:content = json_decode(l:response.content)...

vim scriptだけでHTTP通信を行うことはできないので、Webパッケージではcurl or wget or pythonに依存しています。
大抵の環境はcurl使えると思うので、問題ないかと思います。

vital.vimはプラグインを作っていく上でかなり便利なライブラリです。自分も今回始めて使ってみました、割とすんなり使えました。
プラグインを作っていて使ったことが無い方はぜひ一度使ってみてください。便利すぎてやばいです。

最後に

Vimは良いぞ!

Vim個人的コマンドまとめ

$
0
0

サーバーで見るときvim使う機会があると思うので、個人的まとめです。

vimでバイナリを編集する

$ vim -b file.bin
:%!xxd
バイナリ見ても、実際右にでてくるものをいじっても無意味

保存するときは
:%!xxd -r
してからじゃないと、そのままになるので注意
参考資料:https://qiita.com/urakarin/items/337a0433a41443731ad0

ctags

ctags -R .で現状のディレクトリに作成
Ctrl-]:宣言元に飛び
Ctrl+t:戻る

homeディレクトリまでctagsがあるか確認する
.vimrc

set tags=.tags;$HOME

option

余白の場合の差分は比較しない(常に追加すると逆に気づけなくなるのでコマンドベースのほうがよさそう)
:set diffopt=iwhite

Vimdiff

vimdiff fail1 fail2でdiffmodeで開く

Vimdiffよくつかうコマンド

zR:vimdiffの全てを開く
]+c:次の差分
[+c:前の差分
diffget:差分を受け入れる
diffput:差分を向こう側に入れる

コマンド

% 対応した括弧({}等)に移動します。

git difftoolでvimdiff実施

git config --global diff.tool vimdiff
git config --global difftool.prompt false
git config --global merge.tool vimdiff
git config --global mergetool.prompt false

あとはgit difftool fileとかでvimdiffでみれる

viで開いて、vsで水平展開してdiffをとる

:vs filename
:windo diffthis
//offする場合
:windo diffoff

vimdiffのカラー設定(目に優しくない、もうちょっとなんとかしたい)

~/.vimrcに追加
highlight DiffAdd cterm=bold ctermfg=10 ctermbg=darkred
highlight DiffDelete cterm=bold ctermfg=10 ctermbg=darkblue
highlight DiffChange cterm=bold ctermfg=10 ctermbg=brown
highlight DiffText cterm=bold ctermfg=10 ctermbg=darkmagenta

Vimgrep&結果をQuickfixに表示

:vimgrep sample /decompress/ * | cw
ctrl + oで戻る

参考資料

https://sgry.jp/blog/2014/11/24/1811/comment-page-1/
https://qiita.com/aratana_tamutomo/items/59fb4c377863a385e032

lessで表示中の内容をvim(または任意のエディタ)で開く

$
0
0

ディスク上のファイルを表示している場合

$ less hoge.txt

のようにしてファイルを表示中の場合、less上でvを押せばエディタが起動してそのファイルを編集できる。起動するエディタは環境変数VISUALまたはEDITORで指定できる。

標準出力をパイプでlessに表示させている場合

$ grep hoge hoge.txt | less

のようにlessの入力が標準入力である場合、vを押してもCannot edit standard inputと表示されてエディタは起動しない。
そこでg|$vim -とタイプし最後にエンターを押すとvimが起動する。
gはバッファの先頭に移動。
|はパイプコマンド。
$はバッファの末尾を表すマーク。

参考

https://unix.stackexchange.com/a/43460/157267

【ale】eslint_dを使ってESLintの実行を高速化する

$
0
0

やりたいこと

eslint_dを使用して、aleでのESLintの実行を高速化したい。

eslint_dを実行すると、バックグラウンドでサーバプロセスとして常駐し、ESLint実行時のオーバーヘッドを軽減してくれます。

導入

まず、eslint_dをインストールします。

$ npm install eslint_d -g

次にaleをインストールします。
以下はdein.vimを使用した際の設定例です。
on_cmdオプションを使って、指定されたコマンドが実行されるまでaleの読み込みを遅延しています。

dein.toml
[[plugins]]repo='w0rp/ale'on_cmd=['ALELint', 'ALEToggle', 'ALEEnable', 'ALEToggleBuffer', 'ALEEnableBuffer']

vimrcにaleからeslint_dを使用するための設定を記述します。

設定例
" eslint_dを利用するための設定if executable('eslint_d')letg:ale_javascript_eslint_use_global=1letg:ale_javascript_eslint_executable='eslint_d'endifletg:ale_linters_explicit=1letg:ale_linters={  \'javascript':['eslint'],  \'typescript':['tsserver','eslint'],  \'vue':['eslint']  \}

確認

JavaScriptファイルを開いて、:ALELintコマンドを実行します。

次にターミナルを開いて、以下のコマンドを実行します。

$ eslint_d status

うまく連携ができていれば、Running. One instance cached.のような内容が表示され、aleからeslint_dが実行されていることを確認できます。

eslint_dを停止させる

eslint_dはバックグラウンドで常駐します。
停止させたいときは以下のコマンドを実行します。

$ eslint_d stop

参考

vimのNERDTreeで開いているファイルをfindしつつハイライト

$
0
0

前置き

よくわからないなりにゴリ押しで設定しているため、何点か課題があります。
もっと良いやり方があったら教えてください。

NERDTreeFindコマンドにハイライト機能を追加する

NERDTreeにはFindコマンドがあり、Treeの中にある現在開いているファイルにカーソルを瞬間移動させることができます。
このときついでにファイル名をハイライトしたいと思い、試行錯誤しつつ設定を追加してみました。

最終的な設定

※ 本題はfunction部分です。

nnoremap [nerd]<Nop>
nmap <Space>n[nerd]" NERDTreeTabsを利用するように変更
nnoremap <silent><C-e>:NERDTreeTabsToggle<CR>
nnoremap <silent>[nerd]f:call NERDTreeFindAndHighlight()<CR>
nnoremap <silent>[nerd]h:call NERDTreeHighlight()<CR>" Findしつつファイルをハイライトするfunction! NERDTreeFindAndHighlight()
  NERDTreeFind
  :setlocal isk+=.
  normal!0w
  exe printf('match IncSearch /\<%s\>/', expand('<cword>')):setlocal isk-=.endfunction" 開いてるファイルをハイライトするfunction! NERDTreeHighlight():call NERDTreeFindAndHighlight():wincmdpendfunction

補足・説明

  • ハイライト箇所
normal!0w
exe printf('match IncSearch /\<%s\>/', expand('<cword>'))

normalコマンドでnormalモードのキー操作を実行しています。
nerdtreeにカーソルが移動したときに必ずしも単語上にカーソルがないため、先頭に戻してから単語の箇所まで移動しています。

exeではcwordでカーソル下の単語を拾って、matchに喰わせています。
このときに、文字のハイライトをIncSearchの色で設定してます。1

  • isKeywordの一時的な変更
:setlocal isk+=.
" 何かしらの処理
:setlocal isk-=.

vimではisKeywordという設定を見て単語の区切りを調整しています。
ここではglobalな変更は変えずにlocalなスコープで.を一連のキーワードとして認識するように設定しています。
この設定によりhogehoge.scalaのようなファイルを拡張子を含めて1単語として認識できるようになります。

課題

  1. ファイル名先頭が.のものをハイライトできない
  2. 操作ファイルを変更してもハイライトが残り続けて、煩わしくなる

おわりに

大した記事ではありませんが、初めてvimでfunctionを作ったので記念に記録してみました。
細かいことは無視しているので、参考程度にどうぞ。


  1. 他にもこんな色とかこんな色が設定できるみたいです 

ウィンドウとタブを渡り歩くコマンドを作ってみた

$
0
0

あったら便利かなと思って作りました。
別に無くてもいいかもと思いました。

ソースコード

com!-nargs=1 Wintabmove call<SID>wintabmove(<f-args>)fu!s:wintabmove(direction)"引数でr(ight)かl(eft)を指定するif!count(['r','l'],a:direction)>=1returnendifletl:cur_winnr = winnr()letl:win_num = winnr("$")ifa:direction=='r'"下または右側にウィンドウがある場合 ifl:cur_winnr<l:win_num
      exe (l:cur_winnr+1)."winc w"returnendifelse"上または左側にウィンドウがある場合 ifl:cur_winnr>1
      exe (l:cur_winnr-1)."winc w"returnendifendifletl:cur_tabnr = tabpagenr()letl:tab_num = tabpagenr("$")ifa:direction=='r'"右側にタブがある場合ifl:cur_tabnr<l:tab_num
      exe "+tabn"
      exe "1winc w"returnendifelse"左側にタブがある場合ifl:cur_tabnr>1
      exe "-tabn"
      exe winnr("$")."winc w"returnendifendififa:direction=='r'"これ以上右側に移動できない場合、"先頭のタブの先頭のウィンドウに戻る
    exe "1tabn"
    exe "1winc w"else"これ以上左側に移動できない場合、"最後のタブの最後のウィンドウに戻る
    exe "$tabn"
    exe winnr("$")."winc w"endifendf

vimのreadコマンドで別ファイルの最終行から10行だけ読み込む

$
0
0

:h :rしても見当たらなかったので。

:{range}readは現在ファイルの{range}行目に読み込むから違う操作のはず
? ++optのところにあるのかしら・・・?

正確には全行:rしてから:dで消す操作を行う。

:r<filename>|.,$-10d

現在行に読み込んだに対して、現在行から最終行までを削除する。
もちろんshellコマンドのtailとか使ってもできるんじゃね?

Vimで表示中の色をそのままに Word とか OneNote とかに貼り付けたい

$
0
0

Vimのシンタックスハイライトは単純なものなら簡単に書けて便利です。

なので、<ProjectRoot>/.vim/syntax/hogehoge.vimとかにプロジェクト固有の設定を記載して .local.vimrc(localrcプラグイン) で読み込むってことをよくやります。

ソースコードだけでなく調査メモなどにもこの方法で色付けをしており、その色のままほかの人に展開したいってなったときに調べた方法を備忘録として残しておきます。
Vimで表示している色をなるべくそのまま Word/Excel/PowerPoint/OneNote で再現させる方法です。

image.png

かなり迂遠な方法なので、もっと簡単な方法があれば教えてください。

手順

HTML化して背景色を取り除きます。

Wordを利用する

  1. TOhtmlコマンドでHTMLファイル作成
  2. HTMLファイルをブラウザで開き、全選択してコピー
  3. Word(新規作成)に貼り付け
  4. 全選択し、フォントの設定をしておく
  5. 全選択の状態のまま、「罫線」のメニューから「線種とページ罫線と網掛けの設定」を開く
  6. 「網掛け」タブから「背景の色」を「色なし」を選ぶ
  7. 全選択してコピーし、好きなところに貼り付け

線種とページ罫線と網掛けの設定
「線種とページ罫線と網掛けの設定」はこれ

Excelを利用する

背景色を削除する手間はないですが、貼り付け先がWordやOneNoteだと、貼り付けたときに表形式になります。

  1. TOhtmlコマンドでHTMLファイル作成
  2. HTMLファイルをブラウザで開き、全選択してコピー
  3. Excel(新規作成)に貼り付け
  4. 選択状態を維持し、フォントの設定をする
  5. コピーし、好きなところに貼り付け

【vim-plug】InsertEnterイベントで遅延読み込み

$
0
0

前置き

ここ数年プラグインマネージャにはvim-plugを使わせてもらってますが、
遅延読み込みの種類が少ないのが難点でした。
neobundleの様なInsertEnterで発火する遅延読み込みが欲しい!と思い
Githubのプルリクを見てみると、既にイベント(autocommand)で遅延読み込みするプルリクを作成している方がいらっしゃいました。
それが2017年の事・・vim-plugの作者のjunegunn氏はInsertEnterやCursorHold等のイベントで発火する遅延読み込みには懐疑的なようです。
しかし、そんな我々にjunegunn氏は光を授けて下さっていました。(https://github.com/junegunn/vim-plug/issues/48#issuecomment-51688885)

環境

  • vim 8.1
  • vim-plug

InsertEnterで遅延読み込み

vim起動時にはプラグインを読み込ませず、初めてインサートモードに入った瞬間にプラグインのロードをする設定です。

call plug#begin('~/.vim/plugged')

Plug 'Shougo/deoplete.nvim',{'on':[]}
Plug 'roxma/nvim-yarp',{'on':[]}
Plug 'roxma/vim-hug-neovim-rpc',{'on':[]}
Plug 'ujihisa/neco-look',{'on':[]}
Plug 'Shougo/neco-syntax',{'on':[]}
Plug 'Shougo/neosnippet.vim',{'on':[]}
Plug 'Shougo/neosnippet-snippets',{'on':[]}call plug#end()" Load Event
augroup load_us_insert
    autocmd!
    autocmd InsertEnter * call plug#load(                \'vim-hug-neovim-rpc',                \'nvim-yarp',                \'neco-syntax',                \'neco-look',                \'deoplete.nvim',                \'neosnippet.vim',                \'neosnippet-snippets',                \)| autocmd! load_us_insert
augroup END

これで、まだインサートモードに入っていない状態でPlugStatusするとnot loadedとなり
一度インサートモードに入った後はOKと表示されていると思います。
deopleteが特に起動時に遅かったので、これでだいぶ速くなりました。

CursorHoldで遅延読み込み

カーソルが一定時間静止していると発火するイベントです。
こちらも上と同じように記述出来ます。

" CursorHold 判定までの時間set updatetime=250call plug#begin('~/.vim/plugged')

Plug 'tomtom/tcomment_vim',{'on':[]}
Plug 'itchyny/vim-cursorword',{'on':[]}
Plug 'vimtaku/hl_matchit.vim',{'on':[]}call plug#end()" Load Event
augroup load_us_hold
    autocmd!
    autocmd CursorHold * call plug#load(                \'hl_matchit.vim',                \'vim-cursorword',                \'tcomment_vim',                \)| autocmd! load_us_hold
augroup END

updatetimeでCursorHoldと判定される時間を指定出来ます。
vim起動後に250ミリ秒カーソルを動かさずにいるとプラグインが読み込まれます。
イベントは他にも沢山あるので、色んなイベントに応じて遅延読み込みさせることも出来そうですね。

vimのタイマー機能で遅延読み込み

最近?vimに追加された機能で、vim起動後の一定時間後に発火させることが出来ます。

call plug#begin('~/.vim/plugged')

Plug 'tiagofumo/vim-nerdtree-syntax-highlight',{'on':[]}
Plug 'tak3228/auto_blank_out',{'on':[]}
Plug 'tak3228/eco_cursorline',{'on':[]}
Plug 'Raimondi/delimitMate',{'on':[]}call plug#end()" Load Eventfunction!s:load_plug(timer)call plug#load(                \'delimitMate',                \'auto_blank_out',                \'eco_cursorline',                \'vim-nerdtree-syntax-highlight',                \)endfunction" 500ミリ秒後にプラグインを読み込むcall timer_start(500,function("s:load_plug"))

vim起動後、500ミリ秒後にプラグインが読み込まれます。

まとめ

vimの起動が2,3秒くらい速くなりました。
稚拙ですが、どうかご参考程度に。

設定群の大幅見直し

$
0
0

「カスタマイズの効くポメラが欲しい」という理由でdroidVimを導入して以降、複数デバイスでvimを使うようになり、その際に設定ファイル群のロードをかなり工夫していました。が、そもそも既に用意してあるプラグインのディレクトリを使わずにコントロールするやり方が気に食わず、もっとスマートにやる方法を探していたところ、「それ packaddで出来るよ」という感じでヘルプファイルに書いてあったので、「じゃあ試そうじゃないか」となったわけです。ついでに他の気になっていた部分も後学だ、ということで調整しています。

packadd #とは

引用元

:pa[ckadd][!] {name}

packpath中の任意のプラグインディレクトリを検索し、見つかったプラグインのファイルを読み込む。ディレクトリは以下にマッチしなければならない:

pack/*/opt/{name} ~

見つかったディレクトリは、もし含まれていなければ runtimepathに追加される。もしディレクトリ pack/*/opt/{name}/after が存在すれば、runtimepathの最後に追加される。
"pack/*/start" からのパッケージの読み込みがスキップされた場合、次のディレクトリが最初に検索される。

pack/*/start/{name} ~

今実現したい「デバイスを確認してプラグインを読み込まないための設定」で必要なことはこのあたりまででした。

というわけで、条件付きで読み込みたい自作のプラグイン1をすべて pack/myplug/opt/foo/plugin/foo.vimみたいな感じに移動しました。あとはプラグインディレクトリに条件をチェックして packaddでロードするスクリプトを置けば要件達成です…何だ簡単じゃねぇか。

autoload/packer_example.vim
scriptencoding utf-8function! packer#main() abort
    if exists('g:fooPath')packadd foo
    endifif exists('g:barExe')packadd bar
    endifendfunction

一例としてこんな感じになりました。ここで読むスクリプトのリマップのタイミングの為、autoloadを使っています。

colorschemeの行方

こだわりたいですよね、カラースキーム。最近はプラグイン管理スクリプトとgithubでさっくりとダウンロードして簡単に試せるいい時代ですが、そこからカスタマイズするとなると…あれ、何処に書くのがスマートそう?

いままで

パッケージ管理にvim-plugを使っているので、vim-plugでロードしたあとに読める場所、現環境では別ファイル化してあるのでそこに書いていました。そこからカスタムするとして、なんか長々と設定書くのがちょっと嫌だったんです。カラースキーム変えたときにもスクリプトの書き換え場所増えるし、ならカラースキーム変更したら後は勝手にカスタムした部分探してロードして欲しかったんです…素直にforkしたほうがいいんじゃねえかな?

お箸の国の人ですから

目的と手段がめちゃめちゃになり始めていますが、 autocmdautoloadを使ってカスタム部分だけを動的に読めそうだったのでその路線でいきます。手順としては、カラースキームロード後に autocmd ColorScheme *autocmdにあるカスタム部分をロード、この時に関数名を波括弧変数g:colors_nameを使って読んでもらいます。カスタムしてない場合もあるので、 try ~ catchを使ってなんとかしています。

customCD.vim
scriptencoding utf-8" カスタムしたカラースキームは $VIMFILES/autoload/ へ" トリガー引く用function!s:customCSLoader(name) abort
    trycall ccs_{a:name}#main()letmes= printf('Loaded ''%s'' custom script.',a:name)let isFound =1catch/E117/letmes= printf('No custom script for ''%s''.',a:name)let isFound =0finallyifv:vim_did_enter
            redrawechomsg'costomCSLoader: '.mesendifendtryreturn isFound
endfunction

augroup customColor
    autocmd!
    autocmd ColorScheme * calls:customCSLoader(g:colors_name)
augroup END

if!v:vim_did_enter
    calls:customCSLoader(g:colors_name)endif

v:vim_did_enterなんて変数があったんですね。今までvimrcに最初のスクリプト読み込み時だけ処理してほしい部分があったので、これで書き換えました。

結果

いや、自分で言うのも何なんですがちょっと…偏執的だと思うんです。


  1. 外部のプログラムに依存するものや、特定のディレクトリにファイルがあるけど、droidVimの場合クラウド同期して…という方法が現実的ではない、など理由は様々。 

今使用しているvimのプラグインをまとめた

$
0
0

概要

  • vimとはエディタのことです。sublimeとかatomとかが類似でしょうか。(emacs)
  • ココ最近一気にいろいろ覚えたので忘れないようにメモ&紹介します。
  • プラグインとは、(ここでは)vimの機能をより便利にしてくれるツールのことです。
  • プラグインはいちいちvimでコマンド実行しないといけないのでショートカットも載せておきます。ショートカットは vim.rcに書きます。
  • ちなみにshellはzshを使用しています。

プラグインを入れる前に

  • vimのプラグインマネージャvoltでこれら(↓で紹介する)のプラグインを楽チンにインストールしました。
  • voltのインストール brew install volt
  • See -> https://github.com/vim-volt/volt
  • volt get 'plugname/plugname'でプラグインがインストールできるようになります。プラグインに合わせてインストールする面倒が省けます😱。

NERDTree

  • See -> https://github.com/scrooloose/nerdtree
  • カレントディレクトリからファイルツリーが表示できる。ファイル構造を確認したいときに便利。ファイル内をj,kで移動してenter(選択)してファイルを開ける
  • インストール -> volt get 'scrooloose/nerdtree'
  • 通常、vimを起動したら:NERDTreeと入力する必要がありますが、あまりにも面倒なのでショートカットを登録。 shift + tで開けるようになりました。↓
    • ショートカットをvim.rcに登録 -> nnoremap T :NERDTree<cr>
    • vimはalias v='vim'でvim.rcにショートカットを登録しています。

nt-Jun-22-2019-13-41-42-compressor.gif

FZF

  • See -> https://github.com/junegunn/fzf.vim
  • ファイルをファイル名で検索できます。あやふや(fuzzy)に検索できるので正確にファイル名を入力しなくてもOK。
  • まずはshellでfzfをインストールします。 brew install fzf

    • ctr + rで打ったコマンドの履歴が見れます。
  • 次に、vimでもインストールします。 volt get junegunn/fzf.vim

    • vim.rcset rtp+=/usr/local/opt/fzfを追記します。インストールの最後に書かれていました。
    • ショートカットは、スペース + fでvim.rcに登録しました。 -> nnoremap <Space>f :FZF<cr>

fzf-Jun-22-2019-13-53-16-compressor.gif

Ag

  • FZF↑はファイル名で検索しましたが、こちらはファイル内の語句で検索します。FZF,Agを組み合わせるとかなりのスピードでファイル操作ができるようになります。
  • FZFが予めインストールされ、動いている必要があります。
  • インストールはvolt get 'rking/ag.vim'
    • ショートカット nnoremap <Space>a :Ag<cr>
  • See https://github.com/rking/ag.vim

ag-Jun-22-2019-17-34-45-compressor.gif

winresizer

  • :svで縦に、:vsで横に分割して作業ができるのですが、分割サイズを変更することができます。(リンク飛んでもらったほうがわかりやすい。)
  • volt get 'simeji/winresizer'
  • https://github.com/simeji/winresizer
  • ctr + eでサイズ変更

その他

  • 現在開いているファイルを、vimのタブで開く
    • ショートカット nnoremap <Space>t :tabe %<cr>
  • タブの移動
    • ショートカット noremap gr gT
    • もともとgTで左のタブに移動できるのですが、gtがタブの右なのと、shiftキーを押さないで済むことを考えるとこちらのほうがやりやすいと感じました。

tab-Jun-23-2019-21-45-39-compressor.gif

Buffers(fzfから呼び出す)

  • 一度開いたファイルを探せるので、似たようなファイルが多いときや、すぐに直前のファイルを編集したいときに役立ちます。
  • ショートカット nnoremap <Space>b :Buffers<cr>

buffers-Jun-22-2019-17-42-56-compressor.gif

おわりに

  • 今では必須のプラグインと設定でした。すべてを使いこなしているとはまだ言えませんが、使用頻度は高く、無くてはならないものです。人によって使う使わないはあるので、まずは試してみるのが良いです。

Vimで天気予報

$
0
0

こんにちは
ゴリラ.vimを運営しているゴリラです。

以前Vimで電車乗り換えルート検索するプラグインを作りましたが、
今度はVimでコーディング中に天気を知りたくなるときがあるので天気情報プラグインを作りました。

何ができるの?

地域の天気情報(今日、明日)を表示する。

使い方

  1. :Weatherコマンドを実行して天気情報を知りたい地域名もしくは市名を入力する。
  2. 対象地域が見つかればウィンドウに表示されるのでj or kで選択して Enterで確定できる。キャンセルしたいときは xでウィンドウを閉じる。
  3. 日にちを選択して確定すると天気情報が表示される。

仕組み

本プラグインは以前作った乗換案内プラグインと同じ様にHTMLをパースして、分析しています。
HTTP通信とパースに関してはvital.vimWeb.HTMLモジュールを使用しています。このモジュールは裏ではcurl or wget or pythonが動いています。

プラグインの処理を大きく分けて3ステップがあります。
1. 地域一覧を検索して地域名とURLを取得する
2. 選択した地域のURLから天気情報を実際表示している画面のDOMを取得する
3. 日付を選択した後に、選択肢に応じてDOMをパースして画面を表示する

では、それぞれソースをベースに説明します。

地域一覧を取得

まずWeatherコマンドで呼ぶ関数を用意します。
input()関数を用意するとコマンドラインで入力した値がl:locationに代入されます。
weather#get_city()で地域一覧情報を取得します。

ポップアップウィンドウの選択インターフェイスはfilterオプションに 標準提供されているpopup_filter_menuを使うといい感じになります。

function! weather#weather() abort
    letl:location = input("地域名:")redraw!
    echo ""letl:url ="https://weather.yahoo.co.jp/weather/search/?p=".l:location
    letl:city_list = weather#get_city(l:url)if len(l:city_list)==# 0
        echo "地域が見つかりません"returnendifletl:list =[]for city inl:city_list
        call add(l:list, city.name)endforcall popup_clear()call popup_menu(l:list,{                \"filter":"popup_filter_menu",                \"callback":function("weather#choise_city",[l:city_list]),                \"borderchars":['-','|','-','|','+','+','+','+'],                \"title":"地域の選択",                \})endfunction

続いて、地域情報一覧を取得します。
コメントに書いてあるとおりDOMを整形して、表示に使用する地域名とURLを返す関数を用意します。

" 地域毎名と天気情報URLを取得する" ["   {'name': '埼玉県さいたま市大宮区', 'url': 'https://weather.yahoo.co.jp/weather/11/4310/11103.html'},"   {'name': '埼玉県さいたま市浦和区', 'url': 'https://weather.yahoo.co.jp/weather/11/4310/11107.html'},"   ..." ]function! weather#get_city(url) abort
    " 例外が発生することがあるので、例外処理を行うtryletl:response =s:HTML.parseURL(a:url)catch"/.*/"
        echo v:exception
        return[]endtryletl:record =[]" DOM全体から`table` タグの要素を取得するfor item inl:response.findAll("table")if has_key(item.attr,"class")" `yjw_table3` というクラスがあればテーブル内のデータを取得するif item.attr.class ==# "yjw_table3"for td in item.findAll("td")if type(td)!=# type({})&& len(td.child)==# 0
                        continue
                    endiflet child = td.child[0]if type(child)!=# type({})
                        continue
                    endif" テーブル内のデータを1行ずつdictionaryを作って配列に追加するcall add(l:record,{"name": child.value(),"url":"https:". child.attr.href})endforendifendifbreakendforreturnl:record
endfunction

やっていることはシンプルですね。
HTMLモジュールを使用するとDOMのオブジェクトを取得でき、findAll()で要素を取得できます。value()で要素内の文字データを取得できます。 childは小要素になります。

このような感じで割と力技ですが、スクレイピングはこんな感じかなぁと思ったりします。

日付を選択して天気情報のDOMから情報を取得する

続いて、取得してデータをポップアップウィンドウで表示させる処理が必要なので、次のように書きました。

function! weather#choise_city(city_list, id, idx) abort
    ifa:idx==# -1returnendifletl:city =a:city_list[a:idx-1]call popup_menu(["今日","明日"],{                \"filter":"popup_filter_menu",                \"callback":function("s:choise_day",[l:city]),                \'borderchars':['-','|','-','|','+','+','+','+'],                \"title":"日付の選択"                \})endfunction

callbackで指定する関数はポップアップウィンドウが閉じられたときに実行される関数です。名前のとおりですね。

s:choise_dayの処理は下になります。第1引数はweather#choise_cityで渡した [l:city]になります。idはポップアップウィンドウのIDで、idxは選択したメニューの順番(1から)になります。

function!s:choise_day(city, id, idx) abort
    ifa:idx==# -1returnendiftryletl:dom =s:HTML.parseURL(a:city.url)catch"/.*/"
        echo v:exception
        returnendtryletl:data =s:get_weather(l:dom,a:idx)if empty(l:data)
        echo "データがありません"returnendifletl:title =l:data.title
    letl:rows =l:data.rows

    letl:table =s:T.new({                \"columns":[{},{},{},{},{},{},{},{},{}],                \"header":l:rows[0],                \})calll:table.rows(l:rows[1:])call popup_create(l:table.stringify(),{                \"title":l:title,                \"moved":"any",                \})endfunction

日付を選択した後に、選択肢に応じてDOMをパースして画面を表示する

日にちを選択すると s:shoise_dayが呼ばれ選択した地域の天気情報を s:get_weatherでDOMを整形したデータを取得します。
こちらも同様にテーブルのデータを取得して整形して返しています。

" DOMから今日の天気情報を取得" {"     title: '今日の天気 - 6月22日(土)',"     rows: ["         [時刻,0時,3時,6時,9時,12時,15時,18時,21時],"         [天気,曇り,曇り,雨,雨,曇り,晴れ,曇り曇り], "         [気温(C),24,23,23,24,27,28,26,24],"         [湿度(%),77,80,83,78,58,53,66,72],"         [降水量(mm),0,0,6,0,3,0,0,0]"     ]" }function!s:get_weather(dom, day_kind) abort
    letl:day ="yjw_pinpoint_today"ifa:day_kind==# 2letl:day ="yjw_pinpoint_tomorrow"endifforl:item ina:dom.findAll("div")if has_key(l:item.attr,"id")ifl:item.attr.id ==# l:day
                " titleletl:h3 = item.find("h3")if type(l:h3)!=# type({})&& len(l:h3.child)==# 0return{}endifletl:h3 =l:h3.child

                letl:title = trim(l:h3[0],"\n").l:h3[1].value()" table dataletl:table = item.findAll("tr")letl:rows =[]forl:row inl:table
                    letl:columns =[]forl:column inl:row.findAll("td")call add(l:columns,l:column.value())endforcall add(l:rows,l:columns)endforreturn{"title":l:title,"rows":l:rows}endifendifendforendfunction

最後に

vital.vimはとっても便利です。テーブルのを作成する時もvital.vimを使用していますがこれもとっても便利です。
そしてポップアップウィンドウもとっても便利です。5/25に入ってからどんどん機能が完成していっていい感じになってきています。

興味ある方はぜひポップアップウィンドウも触ってみてください〜

【Vim】コンマ1秒でも起動を速くする為のタイマー機能

$
0
0

前置き

私の重装系vimは、プラグインは40個、vimrcは300行超えのカスタマイズを施してます。
当然、素のvimと比べると明らかに起動が遅い。
プラグインはマネージャに搭載された遅延ロードを使うことで起動の短縮を図ってます。
用意されてる分では足りなかったので、自分で色々試して更に遅延ロードをかけてます。
(参照:https://qiita.com/M4s0n/items/d251a90e4a71d67444dd)

第3世代のエディタが勢力を伸ばす昨今。
盲目にvimを愛する私は、さらなる高みを目指してvimの起動時間を短縮するべく
タイマー機能を活用し、起動を爆速にしました。

環境

vim8

下調べ

先ず、起動時のボトルネックを探りました。

Plug 'mattn/benchvimrc-vim'

上記プラグインを使用すると幾つかボトルネックを発見しました。

python3 from powerline.vim import setup as powerline_setup
python3 powerline_setup()python3 del powerline_setup

set undodir=~/.vim/undo
set undofile

大きく分けて2つ

  • vimのステータスラインに使用しているPowerline
  • ファイルを閉じても、以前のundoが使えるようにする設定

遅延ろぉぉぉぉおおど

みんな大好き遅延ロード。
vim8から搭載されたタイマー機能を使って、vim起動後にボトルネックだった設定を読み込ませる。

function!s:lazy_load(timer)python3 from powerline.vim import setup as powerline_setup
    python3 powerline_setup()python3 del powerline_setup
    echo 'Powerline Loaded'set undodir=~/.vim/undo
    set undofile
endfunction" vim起動後、100ミリ秒後にcallされるcall timer_start(100,function("s:lazy_load"))

functionに遅延ロードしたいものを突っ込むだけの荒業。
後は、時間を設定してタイマーをコールするだけであら不思議。
起動が爆速になりました。

まとめ

全部が全部遅延ロード出来るわけではないですが、
遅延して問題ないものはタイマー機能を使ってロードすると、
ちょっぴり幸せになれます。

参考

  • vimrcのベンチマークを計るプラグイン

https://github.com/mattn/benchvimrc-vim


Vimにcoc.nvimを入れたら便利すぎて感動したっていう話

$
0
0

ぼくはパソコンは実家にしか無く、開発系は全てAndroidのTermuxで済ませなくてはならないので、"ポケットIDE"こと(neo)Vimを使っています。こういうわけで、開発毎に、それぞれの言語の補完プラグイン、Linter(これはうまく動かなかったのだが)を入れ、またファイラを入れ、がんばっていた訳です。

プロローグ

数年前、ネットをVimについてググりサーフィンしていると、"LSP"という単語が目に入りました。"Language Server Protocol"。どうやら、コーディング補助系について規格化したものであるようなのです。
参考:[https://langserver.org/]

Vimに対応させるプラグインも出てきたと聞いて、すぐ飛びついた訳ですが、当時、ぼくは英語力も拙く、READMEさえも読めずにうまく設定すらもできないで諦めてしまいました。

受験を経て、ある程度英語力もついたことだし、または、LSP界隈も活発になっているかも?と期待して、調べてみると、実装も複数なされていて、どうやら聞き覚えのないものも出てきているようです。その一つがcoc.nvimでした。
[https://github.com/neoclide/coc.nvim]

coc.nvimの導入

Vim(8.0.1453以上) || Neovim(0.3.1以上)が必要です。

まず、Node.jsとyarnを入れましょう。

install.sh
apt install nodejs
npm install-g yarn

あとはcoc.nvim自体をいつものパッケージマネージャで加えるだけです。ぼくはvim-plugなのでこうします。

init.vim
Plug 'neoclide/coc.nvim',{'branch':'release'}

そして :PlugInstallですね。

インストール時に色々足りないって注意されたのですが、その都度指摘してくれ、選択すれば自動でそれらをインストールしてくれました。

これで終わりです。以下も参照してみてください。
[https://github.com/neoclide/coc.nvim]

各種設定など

coc.nvimの設定ファイルはコマンド:CocConfigで開くことができます。ただ、デフォルトでも使いにくいわけではないです。

また、coc.nvimのExtension、というものがあり、機能追加・拡張ができます。各言語のlanguageserverもあります。
coc.nvimの拡張専用のパッケージマネージャがあり、それでExtensionを管理してくれます。

試しにtypescript/javascriptのサーバーであるcoc-tsserverを入れてみます。コマンドモードで以下をEnter:

cocinst.vim
:CocInstall coc-tsserver

また、設定すれば、Extensionにないサーバーも使えます。例えば、C系のサーバーのclangdだと、設定ファイルに、

coc-settings.json
{"languageserver":{"clangd":{"command":"clangd","filetypes":["c","cpp","objc","objcpp"]}}}

と書けば使えるようになります。
以下に、各種言語について設定方法などをまとめて下さっているので参照してみてください。
[https://github.com/neoclide/coc.nvim/wiki/Language-servers]

coc.nvimの機能

coc.nvimの各機能を調べてみました。

AutoCompletion

デフォルトで自動の補完が効きました。
cmpl.gif
また、何もサーバーなどを登録せずとも、Vimでデフォルトで使える補完の、ファイル、バッファ、aroundの補完候補は一覧で出てきます。

Diagnostics

エラー、警告、インフォメーションが表示されます。その場所にカーソルを合わせるとメッセージが見れます。
Screenshot_20190625-205610_Termux.jpg

CocList

多機能セレクタと呼ばれるものです。かなり便利です。CtrlPに類似しています。
デフォルトでもextentionのトグル、diagnosticsのリスト表示とジャンプ、symbolの検索まで色々できます。
さらに、拡張coc-listsを入れると、ファイル検索、grep検索、buffer移動など、もう何でもできます…
何でも突っ込んだ感じになる機能ですが、あいまい検索ができるので割とスムーズに操作できます。
recording_20190625_203809.gif

Hover

ヒント(ホバー)を読むことができます。
2019/06/25現在、NeoVimのnightlyビルドではfloating windowが使えるようですが、これはそれにも対応しています。
残念ながら、Termux版はstableのみなのでpreview windowにヒントが表示されています。
Screenshot_20190625-220825_Termux.jpg

References

参照先を一覧にして見ることができます。
Screenshot_20190625-220646_Termux.jpg

Definition

定義にジャンプします。
recording_20190625_215859.gif

機能の呼び出し方

多数の機能がある!と言うことは調べてみて割とすぐにわかったのですが、呼び出し方がちょっと引っかかったのでメモしておきます。

機能呼び出し方
AutoCompletioninsertモードで既に有効
Diagnosticsバッファ横にマーク表示されている
CocList内にリスト有
CocList:CocListコマンドで呼び出し
Hover:call CocAction('doHover')で呼び出し
References<Plug>(coc-references)で呼び出し
Definition<Plug>(coc-definition)で呼び出し

少しバラバラに思えるのですが、多分本当はもっと奥深く体系だった構成なのでしょう。
coc.txtをもっと読み解かなくては……。

まとめや追伸

使ってみた感じですが、Androidスマホでもヌルヌルでサクサク動いて快適です。
これでまたvimが真のideに近づいていけます。
嬉しい限りですね。

この先、新たな発見等をしたら追記していこうと思います。

Windows WSL2でストレスフリーな開発環境

$
0
0

Windowsで手軽に開発したいんや!dirコマンドじゃなくてls使いたいんや!
Linuxを使うのもちょっと手間だし、使えたとして処理が早いかというと微妙だし、Webやアプリ開発の上でなにかと不遇なWindowsさん。
最近Microsoftの頑張りでVisualStudioCodeや本題のWSL2など開発環境の充実が目まぐるしいので、思わずQiitaのアカウント作って執筆に至ります。(はじめまして)

前置きが長くなりましたが、2019年6月上旬に発表されたWSL2を用いてストレスフリーな開発環境を作成していきます。

最初に

2019年6月現在 Insider Previewを介さないとWSL2搭載のWindowsバージョン(Build 18917)にアップデートできないため、Insider Preview登録の上、Windows Updateをかけます。
image.png

WSL2の適用

WindowsのPowerShellを管理者として実行し、下記コマンドをうちこみます。

Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform

RestartNeeded: Trueと言われたらまず再起動しましょう。

次に、私の場合はLinuxディストリビューションとしてUbuntuを利用したので、
MicroSoft StoreからUbuntuをダウンロードした後に下記コマンドを実行

wsl --set-version Ubuntu 2

※Ubuntuの部分をご利用のディストリビューション名に変更ください。

これによりUbuntuをWSL2で使用できるようになりました。

念の為ディストリビューションのバージョンを確認しておきましょう。

wsl -l -v

  NAME      STATE           VERSION
* Ubuntu    Stopped         2

こうなっていたらWSL2の適用が成功しています。
ここまでがWSL2の適用となります。

ストレスフリーな環境構築

さて、本題です。
私は主に下記を導入して、個人的に使いやすい環境を整えました。

  • Windows Terminal
  • Git(ssh key)
  • fish
  • fisher
  • Powerline font

Windows Terminalの導入

こちらも最近リリースされたものでまだPreview版しかでていませんが、Microsoft製のSSHクライアント搭載のターミナルです。タブも使えるし、背景透過もできる。だいたいのニーズは満たしてくれる気がする。なによりMicrosoft製で固めたい欲が出てきたのでとりあえずこれを使います。
image.png

新規タブ追加横の▽からLinuxディストリビューションを選択することができます。
ターミナルのキーバインドや見た目の設定はsettingから json直書きです。Rockだ

セクション毎に設定が書かれているので、UbuntuのセクションにuseAcrylic: trueとすると、ターミナルが半透明になります。

ちなみに\$HOMEが分かりづらい場所にあるので、WindowsのDドライブ(/mnt/d)とかに変更したくなるのですが、後述のgit利用の際にssh keyのパーミッションがWindowsファイル領域だと変更できないといったトラブルに見舞われるため、$HOMEは/home/等にしておきます

git

/home/以下に.sshディレクトリを作成の上、SSH Keysを作成し

ssh-keygen -t rsa -b 4096 -C "your mail address"

このままだとGit Cloneとかした際にPermissionがガバガバだって怒られるので
Permissionを変更しておきましょう

sudo chmod 600 id_rsa

ここまででGitの疎通のためのSSH Keys設定は終了です。
Git config等設定の上、GitHubに公開鍵置いて疎通を確認しましょう。

fishの導入

脳死でfish入れます。fish便利やでぇ

sudo apt-add-repository ppa:fish-shell/release-3
sudo apt-get update
sudo apt-get install fish

ログインシェルをためらいなくfishに変更します

chsh -s /usr/bin/fish

ログインシェルを変更したら一度Terminalを再起動しましょう。

続いてfishのパッケージマネージャーのfisherを入れます

curl -Lo ~/.config/fish/functions/fisher.fish --create-dirs https://git.io/fisher

fisherが動作するかバージョンを確認をします

fisher -v
fisher version 3.2.9 ~/.config/fish/functions/fisher.fish    

これで様々パッケージが手軽に入れられるようになりました。

ためしにテーマぐらい入れておきます。

fisher add oh-my-fish/theme-agnoster

残念なことにPowerline対応フォントがないので文字化けします。
image.png

Powerline fontの導入

Powerline fontからPowerlineに対応したotfをDLしてきます。
Windowsの標準の手順に従ってインストールした後、Windows側のフォント一覧に反映されているか確認します。

fontのインストールが確認できたら、Windows Terminalの設定からfontを変更します。
前述のセクション毎に分かれているUbuntuのfontFaceを変更ください。

  "fontFace" : "Source Code Pro for Powerline"

設定反映すると、文字化けせずにpowerlineフォントが表示されました!かっこいい!
image.png

fishの入力補完はやっぱりいいですね。
image.png

Windowでここまでの開発環境を築けるとは。感動

おわりに

以上がWindowsでのストレスフリーな開発環境構築になります。
といってもまだまだtmuxを入れることやvimをカスタマイズすることもできるので、
以降はみなさんの好きなようにカスタマイズいただければと思います。
WSL2の旨味のDocker等にも触れていないので、それはまたの機会にしたいとおもいます。

ありがとう Microsoft

コピペ2秒でvimカスタマイズ

$
0
0

Vimの設定って難しそう・・・

駆け出し時代の、GUIツールに頼りきりの時期だととっつきづらいですよね。
なのでまずはコピペだけでvimのシンタックスハイライト(コードの色付け)を聞かせる手順を紹介します。

手順

ターミナル
vi ~/.vimrc

エンターを押す。
するとVimが起動するのでiキーでインサートモードに変更。

次に以下をコピペ。

ターミナル
syntax on

escキー→:wqとタイプ。
これで設定完了なので、vi ~/.vimrcで開いた画面の文字に色が付いていることを確認してください。

まだまだ・・・?

これはこうすれば設定できる、というだけなのでまず体験してもらってVimについて沢山記事はあるから設定して見てください。

vimのGoの言語補助プラグインでUnknown functionバグが発生した

$
0
0

vimをupgradeさせた時に唐突にvimがエラーを吐き出し始めました。
エラーは吐き出すもののとりあえず動いてはいました。
ですがvim-goのある部分でエラーが発生しているようでした。

Error on startup: Unknown function: go#config#CodeCompletionEnabled

とりあえずvim-goのissueを探していると今回の問題に関係ありそうなissueを発見しました。

Error on startup: Unknown function: go#config#CodeCompletionEnabled

このissueに書いてあることを要約すると「sheerun/vim-polyglotから使用される言語系プラグインを、vim-polyglotより先に読み込んではいけない。」というものでした。
vim-polyglotを最後に読み込むようにコードを書き換えて再度読み込みすれば解決しました。
私の場合はdein.vimを使っていたのでキャッシュを削除してもう一度プラグインのインストールを走らせる必要がありました。

Vim で Python 用の設定が効かないときの対処

$
0
0

主に自分用メモとして:

vim/ftplugin/python.vimなどで以下のような設定をしているのに、いざ.pyファイルを開いてみると反映されてないとき

setlocal tabstop=4setlocal noexpandtab

.vimrcとかに以下を追記する

letg:python_recommended_style=0

Vim はデフォルトで PEP8 準拠な表示になるようにいろいろやってくれているらしい。

Viewing all 5720 articles
Browse latest View live