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

なんでディレクトリに #vim しないの?

$
0
0

いまさらだけど、ディレクトリに対して vim コマンド打つとファイル開くのが激しく便利だよね!

$ vim .

image
image

このモードがあること自体は知ってたんだけど、なんで使ってなかったんだろう?

Original by Github issue

https://github.com/YumaInaura/YumaInaura/issues/1507


Windows版gVimでConsolas+メイリオを使う

$
0
0

はじめに

Windows版gVim1のフォントに、英数字にはConsolas、日本語などその他の文字にはメイリオを使いたい。しかし、Windows版gVimのフォント(guifont, guifontwide)にはプロポーショナルフォントを指定することができないため、プロポーショナルフォントであるメイリオを指定することができない。メイリオの代わりにMeiryoKeを使えば目的は達成できるが、フォントファイルの改変にはライセンス上の問題がある。
そこで、MeiryoKeは使わず、gVim側でどうにかすることにした。

結論

FEAT_PROPORTIONAL_FONTSを有効にしてgVimをビルドすればよい。フォントが等幅かどうかのチェックが行われなくなる。
Consolas+メイリオ

手順

Kaoriya版のgvim.exeを置き換える形にする。そのため、あらかじめKaoriya版(g)Vimは使えているものとする。
ビルド環境はVisual Studioがインストールされていてnmake, rc等にパスが通っていればよい。この記事ではVisual Studio 2019の"x64 Native Tools Command Prompt for VS 2019"を使っている。
パスやパッチのあて方は環境に合わせて適宜読み替えてほしい。

vimのソースコードを入手

Kaoriya版パッチをあてるために少し前のバージョンに戻す。現在リリースされているKaoriya版ビルドは8.1.1048 (b45125)なので、そのコミットをチェックアウトする。

d:\work>git clone https://github.com/vim/vim.git
d:\work>cd vim
d:\work\vim>git checkout b45125

Kaoriya版vim相当にする

パッチはKaoriya版のpatchフォルダに入っている*.diffを使わせていただく。今回はGit for Windows (msys2)のpatchを使用した。パッチのうち0001-rich_icon.diffは適用できなかったのでスキップした。

$ cd /d/work/vim
$ patch -p 1 < /d/work/vim81-kaoriya-win64/patch/0000-kaoriya_marks.diff
 :
 :

このままビルドしても起動できないので、vimを使って必要なファイルを更新する2

d:\work\vim>cd src
d:\work\vim\src>d:\work\vim81-kaoriya-win64\vim.exe -u NONE -i NONE -X -S create_cmdidxs.vim

ビルド

基本的にvim-jpの説明の通りだが、nmake時にDEFINES=-DFEAT_PROPORTIONAL_FONTSを指定する。
なお、8.1.1048時点ではICONV=yesがデフォルト、MBYTEは常時有効になったため廃止されているので、これらは指定しなくてよいはずだ。
今回はとりあえずConsolas+メイリオさえできればよかったので、LuaやPythonなどは指定していない。

d:\work\vim\src>nmake -f Make_mvc.mak GUI=yes IME=yes DEBUG=no DEFINES=-DFEAT_PROPORTIONAL_FONTS

srcフォルダにgvim.exeが生成されるので、これをKaoriya版gvim.exeと差し替える。
また、Kaoriya版のswitches\catalog\utf-8.vimswitches\enabled\utf-8.vimに移動する。

gvimrc

.gvimrcなどgVimが読み込む設定ファイルに以下のように記述する(renderoptionsを設定しない場合は表示上のゴミが発生したりベースラインより下が欠けたりするが、設定するとフォントによってはベースラインの位置が上にずれてしまう)。

.gvimrc
"set renderoptions=type:directxset ambiwidth=double
set guifont=Consolas:h14
set guifontwide=メイリオ:h14

さいごに

この方法が通用するのは、メイリオのような非ASCII文字が実際には等幅となっているフォントのみであるので、すべてのフォントについてこの方法で正しく描画できるとは限らない。とはいえたいていの日本語フォントは等幅であると思われる。

(例) Yu Gothic UIの場合
Yu Gothic UI

Consolas+メイリオ以外のサンプル

ミンニアム (メイリオ日本語部分と同じデザイナーによる明朝体風フォント)
ミンニアム

ロダンNTLG (ニンテンドー3DSなどで使われているフォント)
ロダンNTLG M

ヒラギノ角ゴ
ヒラギノ角ゴ W4

新ゴ
新ゴ R

たぬき油性マジック
たぬき油性マジック

学校や職場で宗教弾圧を受けているvimmerにおすすめのzshrc

$
0
0

vim is GOD

僕の学校の人間の9割以上がGUIのemacsを使っています。というのも、最初にそれでプログラムを教わるのでそのまま使っているひとが多いのです。
せっかくターミナルが使えるのだから、せめてCUIのemacsを使えばいいのに...
ほとんどの人間がemacs使いなのでvimmerは肩身が狭い思いをしています。
「vim?開いてもいきなり入力できないんでしょ?」「IDEがあるから...」「nanoだろやっぱ(第三勢力)」「は?メモ帳だろ?」そんな声が聞こえてきます。
ぶっちゃけ否定できません。エディタなんて一つ覚えておけば十分だし、わざわざ慣れない他のエディタを体験してよさを探したりなんて現実的ではありません(特にvimとemacsは)。僕もemacsのよさもあるのかなと触ってみようとしたことがありますが、3分持ちませんでした。
結局、人間は争うことを止めることはできないのかも知れません。悲しいですね。

自衛

しかし、学校の規則でもコーディングルールでもないのに少数派だというだけでvimmerが弾圧されている事態は看過できません。
せめて自分の環境だけでも、vimmerのプライドを保ち宗教弾圧と戦いたいものです。
zshrcに以下の設定を追加しましょう。

# vim ~/.zshrc
zshrc
alias emacs='(){echo "
                  ■■                                        ■■                                                                                    
                 ■■■■                                      ■■■■                               ■■■■■■■             ■■■■■■           ■■■■■■■■■      
                 ■■■■                                      ■■■■                             ■■■■■■■■■■          ■■■■■■■■■■         ■■■■■■■■■■■    
                                                                                           ■■■■■■ ■■■■■■       ■■■■■ ■■■■■■        ■■■    ■■■■■■  
                                                                                          ■■■■       ■■       ■■■■      ■■■■       ■■■       ■■■  
                                                                                         ■■■■                ■■■         ■■■■      ■■■        ■■■ 
                                                                                         ■■■                 ■■■          ■■■      ■■■        ■■■■
■■■         ■■■   ■■      ■■   ■■■■      ■■■■               ■■       ■■■■■■             ■■■                 ■■■           ■■■      ■■■         ■■■
 ■■■        ■■    ■■      ■■  ■■■■■■■  ■■■■■■■              ■■      ■■■■■■■■■           ■■■                 ■■■            ■■■     ■■■         ■■■
 ■■■       ■■■    ■■      ■■■■■■ ■■■■ ■■■■■■■■■             ■■     ■■■■   ■■■           ■■■                 ■■■            ■■■     ■■■         ■■■
  ■■       ■■■    ■■      ■■■■     ■■■■■    ■■■             ■■     ■■■                  ■■■                 ■■■            ■■■     ■■■          ■■
  ■■■      ■■     ■■      ■■■      ■■■       ■■■            ■■     ■■                   ■■■                 ■■■            ■■■     ■■■          ■■
  ■■■     ■■■     ■■      ■■       ■■■       ■■■            ■■     ■■■                  ■■■      ■■■■■■■    ■■■            ■■■     ■■■          ■■
   ■■     ■■■     ■■      ■■       ■■■       ■■■            ■■     ■■■■■                ■■■      ■■■■■■■    ■■■            ■■■     ■■■         ■■■
   ■■■    ■■      ■■      ■■       ■■■       ■■■            ■■       ■■■■■■             ■■■          ■■■    ■■■            ■■■     ■■■         ■■■
   ■■■   ■■■      ■■      ■■       ■■■       ■■■            ■■         ■■■■■            ■■■          ■■■    ■■■            ■■■     ■■■         ■■■
    ■■   ■■■      ■■      ■■       ■■■       ■■■            ■■           ■■■■           ■■■          ■■■    ■■■           ■■■      ■■■         ■■■
    ■■■  ■■       ■■      ■■       ■■■       ■■■            ■■             ■■            ■■■         ■■■     ■■■          ■■■      ■■■        ■■■ 
    ■■■ ■■■       ■■      ■■       ■■■       ■■■            ■■             ■■■           ■■■■        ■■■     ■■■■        ■■■■      ■■■        ■■■ 
     ■■ ■■■       ■■      ■■       ■■■       ■■■            ■■     ■       ■■             ■■■■       ■■■      ■■■■      ■■■■       ■■■      ■■■■  
     ■■■■■        ■■      ■■       ■■■       ■■■            ■■    ■■■■    ■■■              ■■■■■■ ■■■■■■       ■■■■■ ■■■■■■        ■■■    ■■■■■   
      ■■■■        ■■      ■■       ■■■       ■■■            ■■     ■■■■■■■■■                ■■■■■■■■■■■         ■■■■■■■■■■         ■■■■■■■■■■■    
      ■■■         ■■      ■■       ■■■       ■■■            ■■       ■■■■■■                   ■■■■■■■             ■■■■■■           ■■■■■■■■■      
" && sleep 1 && if [[ "$@" =~  - ]]; then vim $2; else vim $@; fi}'

vim is GOD.(本音)

# emacs -nw .zshrc

みたいなオプションとか引数があったら、エラーが起こる(vimに無いオプションだから)から結構困りました。
: (なにもしないコマンド)を使ってみたりしたんですが、今度はファイルに対応できなくなったり...
結局、引数に" -"(半角スペース+-)が含まれていたらオプションだと見なして、二番目の引数だけをとることにしました。(ガバガバ)
シェルスクリプトに軽く起こすとこんな感じ。

#vim is GOD と表示(AA略echo"vim is GOD"&&#よく見えるように1秒待機sleep 1 &&#もし、引数にオプションが含まれていたら、if[["$@"=~  - ]];then#2番目の引数だけ実行
    vim $2;else#そうでないなら全体を実行
    vim $@;fi

aliasだから軽く一行で書きましたが、もっと厳密に書くこともできます。
動かすとこんな感じ。
Screenshot from 2019-04-29 20-27-46.png
Screenshot from 2019-04-29 20-27-49.png
綺麗に起動しましたね。(vimが)

最後に

意外とzshrcとかaliasとかって柔軟に動くんですね。感動しました。
ジョークスクリプトのつもりでさっさと書いて出そうと思っていたので、思いがけず勉強になりました。
まさか無いとは思いますが、他の記事とネタかぶりしてたらperlワンライナーと組み合わせた複雑なやつも書いてみようかなと思います。
よいこの皆さんはemacs派の友達のzshrcにこれをこっそり書いてはいけませんよ。

参考

Zshのエイリアスの好きなところに引数を取りたい - Qiita

Androidでもvimを使いたい - DroidVimの設定あれこれ

$
0
0

ポメラ!お前はポメラになるのだ!

「ポメラほしい。でもUSキーじゃないしじゃあUSキーのネットブックほしい。ぶっちゃけCUIでいい。いっそポメラの代替品ならVimだけ動けばいい。」みたいなことを最近言っていたんですが、少し冷静になりまして、状態もよくわからん中古のネットブック買って、バッテリーがうんちゃらとか変態レイアウトがうんちゃらとか言うくらいだったら、root取れる中華タブとキーボード買うほうがマシよねって気がついたんです。ホラちょうどここにカスタマイズしようとして放っておいたFire7もあるんですよ。ここはちょっと一念発起して、昔チェックだけはして「スマホじゃ無理だな」…と放っておいたDroidVimと、bluetoothキーボードの組み合わせで持ち歩けるVimを作ってしまおうという魂胆なんです。

「俺の答えはこれや」と叫びvimrcを投げつける

新しい端末でvimを使うならまず使い込んだ自分のvimrcを放り込むところから始まるんですが、幸いDroidVimは課金すればbusybox、gitが使えるのでさっさと課金して自分のvimrcをpullします。公式のドキュメントでは「どっか.vimrcをうまいこと置いてシンボリックリンクで」とのことですが、もちろん.vimディレクトリまるごとシンボリックリンクでも問題なかったです。.vimの実ファイル群置く場所は、まぁAndroidだし/storage/emulate/0/下でいいんじゃないですかね?ここならDroidVimの環境変数$INTERNAL_STORAGEに入っているので何かのっぴきならないことがあってもそんなに困らないでしょう。

もちろん外部ツールに依存しない前提ですが、殆どのvimscriptは問題なく動きました。プラグインマネージャのvim-plugも問題無しでした。環境に依存するものもあるのでvimrcにちょっとした仕掛けをしておくほうが良さそうなので変数を仕掛けておきます。

vimrc
letg:isDroid= split(&runtimepath,',')[0]=~? 'droidvim' ? v:true :v:false

変数をbool値としてしか使うつもりがないのでv:trueを使っていますが、そのへんはどうすればいいのか分かっていません。さておき、DroidVimで弾きたい設定がある場合はこれを使って行きます…弾きたいのは…

~/.vim/plugin/**/*.vim

今まで自分で書いたスクリプトはとりあえずpluginに放り込んでおけばガンガン読んでくれるので安心していたんですけど、ここに放り込むとファイル単位でスクリプトを弾くのがとても面倒なので工夫せざるを得なくなりました。netrwを使っている手前、ディレクトリ構造で処理しようとするとディレクトリに潜る手順が増えるのが煩わしいし、そもそもpluginディレクトリ配下にある*.vimは何でも読む以上ディレクトリツリーも使えません。しょうがない、オミットするためのスクリプトを書いて乗り切りました。

plugLoader.vim
scriptencoding utf-8letg:excludePlugin={}letg:excludePlugin.droid =[]" ここDroidVimで弾くスクリプトのファイル名 (以下同様)letg:excludePlugin.win=[]letg:excludePlugin.unix =[]" プラグインの読み込みletg:myPlug= glob($VIMFILES.'/myplug/*.vim',0,1)let currentTerm =''ifg:isDroid==1let currentTerm ='droid'elseif has('win32')let currentTerm ='win'elseif has('unix')let currentTerm ='unix'endiffor pick ing:excludePlugin[currentTerm]let rgx = pick.'$'callfilter(g:myPlug,'v:val !~# rgx')endforforscripting:myPlug
    execute('source '.script)endfor

スクリプト中の$VIMFILESの中身は先のg:isDroidでも使っていたsplit(&runtimepath, ',')[0]です。

I・M・E! I・M・E!

日本語入力がある限り日本人のvimmerは永遠にIMEの設定をする運命なのですが、当然のごとくAndroid+H/Wキーボードの環境でも襲ってきますというか、PCベースの環境より更に悪化していると言って差し支えないでしょう。とりあえず「Google日本語入力」を使っているので色々と試しましたが、公式ドキュメントに倣うのが一番無難でそれ以上快適にはならなさそうでした。但し、g:imcontrol_insertを設定すると入力モードが半角の「単語ベース」の入力になる上、そもそもGoogle日本語入力経由の入力がかなりガタつくのでちょっと使い物にならないなという感じです。日本語入力のために2ストローク使うのはシャクですが「IMEショートカット→入力切替」の手順を踏むのがいいのかなと思います。それとも:TFAModで仕込んだり出来るんですかねこれ…

余談

そもそもFire7でDroidVimを使うにあたって、そんじょそこらのH/Wキーボードを買うとCAPS⇔ctrlのスワップが出来なくて1ちっとも快適になりません。実際買ったのはそんじょそこらのやつなので、なんとかせんとならんのですが…Fire7君は立派に戦って文鎮となりました。現環境は中古で買ったQua tabです。Google Playがマトモに入っているならroot取らなくてもH/Wキーボードのレイアウトが変更できるのでまぁ及第点です。IMEでクッソガクガクするのはもしかしたら単純にQua Tabのパワー不足が原因かもしれないですが…


  1. それが必要じゃない人生であれば幸せなんですがまぁ、無理っすね20年前にはもう入れ替えてたし…ある程度のクラスのキーボードはハードウェアでスワップできるようになっててほしいんですけどね。今使ってるLenovoくんも入れ替えはOS側に頼ってるし… 

とりあえずこれだけ使えればVimでなんとかなる

$
0
0

はじめに

Vimってターミナル上で動かせるし、キーボードで完結できるし、いいですよね。Vimを使い始めて4ヶ月ほど。まだまだ使いこなせていないですが、そんな私でもとりあえずVimで困ることはほとんどなくなってきました。
そこで、今私がよく使っている操作を整理してみました。ここに書いた操作が使いこなせればVimmerとしての一歩を踏み出したレベルにはなっているはず。
これからVimを始めてみようという方の参考になれば幸いです。

あくまで「これだけ使えればなんとかなる」レベルの操作ですので、より詳しく知りたい方は最後にある参考記事をご参照ください。

ちなみにここに書いたのは(今のところ)「素のVim」の操作のみです。プラグインは入っていません。もしかしたら今後追記していくかもしれません。

よく使うVimの操作

移動系

  • lでカーソル右移動
  • hでカーソル左移動
  • jでカーソル下移動
  • kでカーソル上移動
  • Ctrl + fで1ページ下に移動
  • Ctrl + bで1ページ上に移動
  • Gで最終行に移動
  • ggで最初の行に移動
  • $でカーソル行の最後の文字に移動
  • ^でカーソル行の最初の文字に移動
  • 0でカーソル行の最初に移動
  • 28Gで28行目に移動
  • wで次の単語に移動
  • bで前の単語に移動

挿入系

  • iでカーソル位置からインサートモード
  • aでカーソルの右からインサートモード
  • oでカーソルの下に1行追加してインサートモード
  • Oでカーソルの上に1行追加してインサートモード

選択系

  • vでビジュアルモード
  • Ctrl + vで矩形選択モード
  • ビジュアルモード/矩形選択モードでカーソル移動で移動範囲を選択

ヤンク(コピー)・ペースト系

  • yでビジュアルモード/矩形選択モードで選択した範囲をヤンク
  • yyでカーソル行1行をヤンク
  • :3,10yで3行目から10行目までをヤンク
  • pでカーソルの右にペースト(行をペーストする場合はカーソル行の下にペースト)

削除系

  • xで1文字切り取り
  • ddで1行切り取り
  • :15,30dで15行目から30行目までを切り取り

検索系

  • *でカーソル位置の単語を検索(ハイライト表示)
  • :nohでハイライト解除(.vimrcnmap <Esc><Esc> :nohlsearch<CR><Esc>を追記して、ESC連打でハイライト解除)
  • /hogehogeを検索
  • /^fでfから始まる行を検索(つまり/での検索には正規表現が使える)
  • nで検索対象の次へ移動
  • Nで検索対象の前へ移動

置換系

  • :%s/foo/bar/gfoobarに一斉置換

バッファ・ウィンドウ系

  • :wで保存
  • :wqで保存してウィンドウを閉じる
  • :qでウィンドウを閉じる
  • :q!で保存せずにウィンドウを閉じる
  • :vsで画面を左右に分割
  • :spで画面を上下に分割
  • :lsで現在開いているバッファを確認
  • :b2でバッファ番号2を表示する

その他

  • ESCでノーマルモード
  • uでアンドゥ
  • Ctrl + rでリドゥ

おわりに

Vimの操作はまだまだあります。何度も繰り返し操作することで自然と覚えていきますので、最初のうちは根気強く使っていきましょう。
とりあえずこれだけ使えればVimでなんとかなるはず。

参考

Vim を使い始めようと思ったからチートシートを作ってみた

$
0
0

Vim チートシート

起動

コマンド動作
vim {path/file}vim を実行(指定ファイルを開く)

終了

キー入力動作
:q[uit]終了
:q!終了(編集破棄)

ファイル操作

キー入力動作
:e[dit] {path/file}ファイルを開く(相対ファイルパスを入力。[TAB]で補完入力)
:e[dit] {path}ファイルエクスプローラを指定パスでオープン([TAB]で補完入力)
:e.ファイルエクスプローラをカレントディレクトリでオープン
:E[xplore]アクティブなバッファのディレクトリでファイルエクスプローラをオープン
:S[explore]:E の水平分割版
:Vexplore:E の垂直分割版
:findファイルを検索して開く
検索先は path に予め設定しておく
src配下なら :set path+=src/**
:sav[eas] {path/file}ファイル名を付けて保存
:w[rite]ファイルの上書き保存

モード切替

ノーマルモード

キー入力動作
[ESC]
[CTRL] + ]
ノーマルモード

インサートモード開始

キー入力動作
iカーソル位置から
aカーソル位置の後ろから
I行頭から
A行末から
oカーソル行の下に新規行
Oカーソル行の上に新規行
Cカーソル位置から行末を削除
sカーソル位置を1文字削除
Sカーソル行で新規行

置換モード開始

キー入力動作
R
[INS]
置換モード

ビジュアルモード開始

※ トグルでノーマルモードと切り替わる

キー入力動作
v文字指向
V行指向
[CTRL] + vブロック指向

ビジュアルモード中

キー入力動作
gv直前の選択範囲を再選択
o選択範囲の始点と終点をトグルで移動

カーソル移動

キー入力動作
h
j
k
l
w
b
単語の先頭(区切り文字まで)
W
B
単語の先頭(区切り文字を除く)
e単語の末尾(区切り文字まで)
E単語の末尾(区切り文字を除く)
ggファイルの先頭行
Gファイルの末尾行
H画面の先頭行
M画面の中央行
L画面の末尾行
0行頭
^行頭(非空白文字)
$行末
gm行の中央
g_行末(非空白文字)
%対の括弧
:{number}number行
''ジャンプ前の位置
'.直前に変更があった位置
'^直前に挿入があった位置
m{a-zA-Z}現在位置をマーク
'{a-zA-Z}マークした位置

ノーマルモード中の編集

キー入力動作
x1文字カット
dd1行カット
.直前の変更を繰り返す
yy1行コピー
pペースト(カーソル位置の後)
Pペースト(カーソル位置の前)
uアンドゥ
[CTRL] + rリドゥ

インサートモード中の編集

キー入力動作
[CTRL] + h直前の1文字削除
[CTRL] + w直前の1単語削除
[CTRL] + u行頭まで削除
[CTRL] + r{number}ペースト

検索

行内1文字検索

キー入力動作
f{char}前方検索
t{char}前方検索(1文字前)
F{char}後方検索
T{char}後方検索(1文字後)
;次を検索
,前を検索

ファイル内文字列検索

キー入力動作
/{pattern}ファイル内で前方検索
?{pattern}ファイル内で後方検索
*カーソル位置の単語を前方検索
#カーソル位置の単語を後方検索
n次を検索
N前を検索

置換

文字列置換

キー入力動作
:[%]s/{pattern}/{string}置換(%なし=前方, %あり=全て)

1文字(上書き)

キー入力動作
r{char}1文字上書き(置換モード)
gr{char}1文字上書き(仮想置換モード)

インデント

準備
:set shiftwidth=4 softtabstop=4 expandtab

キー入力動作
>インデントを下げる
<インデントを上げる
=自動インデント

ウインドウ

キー入力動作
[CTRL] + w, s水平分割
[CTRL] + w, v垂直分割
[CTRL] + w, cアクティブウインドウを閉じる
[CTRL] + w, oアクティブウインドウだけ残す
[CTRL] + w, Tアクティブウインドウを新規タブに移動
gt次のタブに切替
gT前のタブに切替

参考

vimをgolangに対応させる

$
0
0

golangを始めるにあたってvimに色々プラグインを追加

vim-go

vim上でgoの様々なコマンドを実行するためのプラグイン
https://github.com/fatih/vim-go

色々プラグインを追加する気だったのですが、vim-goを入れたら一通り必要なものが揃ったので他に書くことがない。。。

令和になったのでワイのinit.vim晒す

$
0
0

001.jpg

Vim歴3年のCassinと申します。
最近は init.vim 書くのが自分にとって時間の無駄だという考えに至ったので VSCodeを使っています。

今回紹介するコードはここにあります。Unix系の環境で vim-airlineのフォント, vim-plugそして neovimがインストールされていれば ~/.config/nvimにそのまま git cloneして頂ければ
ほぼエラーなしで使用できると思います。

参照先がわからない様々なサイトのコードにお世話になっております。ありがとうございます。

対応している言語

Haskell, C++11, Ruby, Rust, LaTeX, TOML, Markdown, Python3, Rust, Dart

ディレクトリ構造

ディレクトリ構造
~/.config/nvim
          ├── init.vim
          └── init
              ├── color
              │   └── color.init.vim
              ├── main
              │   ├── main.init.vim
              │   ├── nnormap.init.vim
              │   └── othermap.init.vim  
              └── plugin
                  ├── plugin_install.init.vim
                  └── plugin_settings.init.vim

各設定ファイル

init.vim
scriptencoding utf-8

runtime init/main/main.init.vim
runtime init/main/nnormap.init.vim
runtime init/main/othermap.init.vim
runtime init/plugin/plugin_install.init.vim
runtime init/plugin/plugin_settings.init.vim
runtime init/color/color.init.vim
color.init.vim
scriptencoding utf-8

syntax on" 179 : 黄色" 51  : 水色 (少し明るい)" 45  : 水色" 6   : 水色 (少し暗い)" 24  : 水色 (より暗い)" 255 : 白色" 240 : 灰色" color scheme 拡張 " one darkauColorScheme * hi Normal       ctermbg=none
auColorScheme * hi LineNr       ctermbg=none ctermfg=240 cterm=italic " 行番号
auColorScheme * hi StatusLine   ctermbg=none " アクティブなステータスライン
auColorScheme * hi StatusLineNC ctermbg=none " 非アクティブなステータスライン
auColorScheme * hi Comment      ctermfg=243 cterm=italic " コメントアウト
auColorScheme * hi Statement    ctermfg=45auColorScheme * hi DiffAdd      ctermbg=24  " 追加行
auColorScheme * hi Identifier   ctermfg=45 "cterm=boldauColorScheme * hi Haskell01 ctermfg=179 " 黄色
auColorScheme * hi Haskell02 ctermfg=45  " 水色
auColorScheme * hi Haskell03 ctermfg=255 " 白

" スペルチェックau Colorscheme * hi SpellBad ctermfg=46 cterm=none
" キャメルケースチェックauColorScheme * hi SpellCap ctermfg=46 cterm=boldset background=lightcolo onedark
"colo tomorrow"colo hybrid

augroup filetypedetect
  auBufRead,BufNewFile *.hs :call ColHaskell()
augroup END

" Haskell 用のシンタックスハイライトfunction! ColHaskell()auBufWinEnter * letw:m3 = matchadd("Haskell02",'(')auWinEnter    * letw:m3 = matchadd("Haskell02",'(')auBufWinEnter * letw:m3 = matchadd("Haskell02",')')auWinEnter    * letw:m3 = matchadd("Haskell02",')')auBufWinEnter * letw:m3 = matchadd("Haskell02",'$')auWinEnter    * letw:m3 = matchadd("Haskell02",'$')endfunction" 行末スペース、行末タブの表示" highlight TrailingSpaces ctermbg=red guibg=#FF0000" highlight TrailingSpaces ctermbg=blue guibg=#FF0000
highlight TrailingSpaces ctermbg=50 " or 46() or 240(灰色)
highlight Tabs ctermbg=black guibg=8 " guibg=#000000auBufNewFile,BufRead * call matchadd('TrailingSpaces',' \{-1,}$')auBufNewFile,BufRead * call matchadd('Tabs','\t')" 全角スペースの表示
highlight ZenkakuSpace cterm=underline ctermbg=BLUE
auBufWinEnter * letw:m3 = matchadd("ZenkakuSpace",' ')auWinEnter * letw:m3 = matchadd("ZenkakuSpace",' ')
main.init.vim
scriptencoding utf-8set fenc=utf-8set nobackup
setnoswapfileset autoread
set tabstop=2 shiftwidth=2 expandtab
setnumber"set scrolloff=5set scrolloff=10filetype plugin indent on"set laststatus=2"tex ギリシャ文字可視化無効letg:tex_conceal=''" 英語と日本語のスペルチェック z= で修正候補setspellset spelllang=en,cjk

hiclear SpellBad
""hi SpellBad cterm=underlinehiclear SpellCap
""hi SpellCap cterm=underline,bold" remove trailing whitespace" autocmd BufWritePre * :%s/\s\+$//ge
nnormap.init.vim
scriptencoding utf-8" move middle of the current line
nnoremap sm:<C-u>call cursor(0,strlen(getline("."))/2)<CR>" modes short cut
nnoremap s<space>:<C-u>terminal<cr>" 日本語
nnoremap あ a
nnoremap い i" split windows
nnoremap s <Nop>
nnoremap sj <C-w>j
nnoremap sk <C-w>k
nnoremap sl<C-w>l
nnoremap sh<C-w>h
nnoremap sJ <C-w>J
nnoremap sK <C-w>K
nnoremap sL <C-w>L
nnoremap sH <C-w>H
nnoremap sn gt
nnoremap sp gT
nnoremap sr<C-w>r
nnoremap s=<C-w>=
nnoremap sw<C-w>w
nnoremap so<C-w>_<C-w>|
nnoremap sO <C-w>=
nnoremap sN:<C-u>bn<CR>
nnoremap sP :<C-u>bp<CR>
nnoremap st:<C-u>tabnew<CR>
nnoremap sT :<C-u>Unite tab<CR>
nnoremap ss :<C-u>sp<CR>
nnoremap sv:<C-u>vs<CR>
nnoremap sq :<C-u>q<CR>
nnoremap sQ :<C-u>bd<CR>
nnoremap sb:<C-u>Unite buffer_tab -buffer-name=file<CR>
nnoremap sB :<C-u>Unite buffer -buffer-name=file<CR>
othermap.init.vim
scriptencoding utf-8" nerdtree
map <C-n>:NERDTreeToggle<CR>" insert mode
inoremap <silent><C-f><right>
inoremap <silent><C-b><left>" 括弧補完
inoremap (()<left>" 上の例外処理: の後に続けて)を押したとき
inoremap <expr>)  strpart(getline('.'),col('.')-1,1)==")" ? "\<Right>":")"" 括弧補完
inoremap [[]<left>" 上の例外処理: の後に続けて)を押したとき
inoremap <expr>]  strpart(getline('.'),col('.')-1,1)=="]" ? "\<Right>":"]"" quotation補完
inoremap " ""<left>
inoremap ' ''<left>

augroup FolowFile
    autocmd!
    autocmd BufRead,BufNewFile *.c    inoremap {<enter>{}<left><cr><cr><up><tab>
    autocmd BufRead,BufNewFile *.dart inoremap {<enter>{}<left><cr><cr><up><tab>
    autocmd BufRead,BufNewFile *.cpp  inoremap {<enter>{}<left><cr><cr><up><tab>
    autocmd BufRead,BufNewFile *.rs   inoremap {<enter>{}<left><cr><cr><up><tab>
    autocmd BufRead,BufNewFile *.go   inoremap {<enter>{}<left><cr><cr><up><tab>
augroup END

" terminal mode
tnoremap <silent><esc><C-\><C-n>
plugin_install.init.vim
scriptencoding utf-8" update plugins ->" :PlugInstall" :UpdateRemotePluginscall plug#begin()
Plug 'SirVer/ultisnips'
Plug 'honza/vim-snippets'
Plug 'kana/vim-submode'        " resize split windows

" differences
Plug 'brooth/Far.vim'" git
Plug 'tpope/vim-fugitive'" indent guides
Plug 'Yggdroot/indentLine'" colorlise status line" Plug 'itchyny/lightline.vim'" Plug 'Cassin01/neoline.vim'
Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'" syntastic
Plug 'vim-syntastic/syntastic'" pathogen for syntastic
Plug 'tpope/vim-pathogen'" haskell
Plug 'eagletmt/neco-ghc'                " completion
Plug 'neovimhaskell/haskell-vim'        " syntax
Plug 'dag/vim2hs'                       " syntax, indent

" python3
Plug 'davidhalter/jedi-vim'             " completion

" c++
Plug 'octol/vim-cpp-enhanced-highlight' " syntax highlight
Plug 'justmao945/vim-clang'             " completion

" Ruby
Plug 'vim-ruby/vim-ruby'" Rust
Plug 'rust-lang/rust.vim'              " completion

" Dart
Plug 'dart-lang/dart-vim-plugin'" toml
Plug 'cespare/vim-toml'"markdown"Plug 'godlygeek/tabular'"Plug 'plasticboy/vim-markdown'" :Unite colorscheme -auto-preview
Plug 'Shougo/unite.vim'
Plug 'ujihisa/unite-colorscheme'" colorschemes
Plug 'altercation/vim-colors-solarized'   " solarized
Plug 'croaker/mustang-vim'                " mustang
Plug 'jeffreyiacono/vim-colors-wombat'    " wombat
Plug 'nanotech/jellybeans.vim'            " jellybeans
Plug 'vim-scripts/Lucius'                 " lucius
Plug 'vim-scripts/Zenburn'                " zenburn
Plug 'mrkn/mrkn256.vim'                   " mrkn256
Plug 'jpo/vim-railscasts-theme'           " railscasts
Plug 'therubymug/vim-pyte'                " pyte
Plug 'tomasr/molokai'                     " molokai
Plug 'chriskempson/vim-tomorrow-theme'    " tomorrow night
Plug 'vim-scripts/twilight'               " twilight
Plug 'w0ng/vim-hybrid'                    " hybrid
Plug 'freeo/vim-kalisi'                   " kalisi
Plug 'morhetz/gruvbox'                    " gruvbox
Plug 'toupeira/vim-desertink'             " desertink
Plug 'sjl/badwolf'                        " badwolf
Plug 'itchyny/landscape.vim'              " landscape
Plug 'joshdick/onedark.vim'               " onedark in atom
Plug 'gosukiwi/vim-atom-dark'             " atom-dark
Plug 'liuchengxu/space-vim-dark'          " space-vim-dark-> recommended 'hi Comment cterm=italic'
Plug 'kristijanhusak/vim-hybrid-material' "hybrid_material
Plug 'drewtempelmeyer/palenight.vim'      " palenight

" others
Plug 'scrooloose/nerdtree'
Plug 'Shougo/deoplete.nvim'               " auto completion
call plug#end()
plugin_settings.init.vim
scriptencoding utf-8" indent-guides"let g:indent_guides_enable_on_vim_startup=1 " enable indent-guides let g:indent_guides_guide_size =1letg:indent_guides_start_level=1letg:indent_guides_auto_colors=0 " enable auto colorsletg:indent_guides_exclude_filetypes=['help','nerdtree']
autocmd VimEnter,Colorscheme * :hi IndentGuidesOdd   ctermbg=237
autocmd VimEnter,Colorscheme * :hi IndentGuidesEven  ctermbg=237" indentLineletg:indentLine_enabled=0 " disable by default
letg:indentLine_char='⎸'" fugitive.vimset statusline+=%{FugitiveStatusline()}" syntasicset statusline+=%#warningmsg#
set statusline+=%{SyntasticStatuslineFlag()}set statusline+=%*
letg:syntastic_always_populate_loc_list=1letg:syntastic_auto_loc_list=1letg:syntastic_check_on_open=1letg:syntastic_check_on_wq=0letg:syntastic_mode_map={      \'mode':'passive',      \'active_filetypes':['c','cpp','python3']      \}letg:syntastic_cpp_compiler='clang++'letg:syntastic_cpp_compiler_options=' -std=c++11 -stdlib=libc++'" submodecall submode#enter_with('bufmove','n','','s>','<C-w>>')call submode#enter_with('bufmove','n','','s<','<C-w><')call submode#enter_with('bufmove','n','','s+','<C-w>+')call submode#enter_with('bufmove','n','','s-','<C-w>-')call submode#map('bufmove','n','','>','<C-w>>')call submode#map('bufmove','n','','<','<C-w><')call submode#map('bufmove','n','','+','<C-w>+')call submode#map('bufmove','n','','-','<C-w>-')" lightline" let g:lightline = {"      \ 'colorscheme': 'onedark',"      \ }" vim-airlineset laststatus=2letg:airline_powerline_fonts=1letg:airline#extensions#tabline#enabled =1letg:airline#extensions#tabline#buffer_idx_mode =1letg:airline#extensions#whitespace#mixed_indent_algo =1"let g:airline_theme = 'tomorrow'if!exists('g:airline_symbols')letg:airline_symbols={}endif" unicode symbolsletg:airline_left_sep='»'letg:airline_left_sep='▶'letg:airline_right_sep='«'letg:airline_right_sep='◀'letg:airline_symbols.crypt ='🔒'letg:airline_symbols.linenr ='☰'letg:airline_symbols.linenr ='␊'letg:airline_symbols.linenr ='␤'letg:airline_symbols.linenr ='¶'letg:airline_symbols.maxlinenr =''letg:airline_symbols.maxlinenr ='㏑'letg:airline_symbols.branch ='⎇'letg:airline_symbols.paste ='ρ'letg:airline_symbols.paste ='Þ'letg:airline_symbols.paste ='∥'letg:airline_symbols.spell='Ꞩ'letg:airline_symbols.notexists ='∄'letg:airline_symbols.whitespace ='Ξ'" powerline symbolsletg:airline_left_sep=''letg:airline_left_alt_sep=''letg:airline_right_sep=''letg:airline_right_alt_sep=''letg:airline_symbols.branch =''letg:airline_symbols.readonly =''letg:airline_symbols.linenr ='☰'letg:airline_symbols.maxlinenr =''"vim-clangletg:clang_c_options='-std=gnu11'letg:clang_cpp_options='-std=c++11 -stdlib=libc++' " c++11" disable auto completion for vim-clangletg:clang_auto=0" deoplate" let g:deoplete#enable_at_startup = 1"------------------------------------------"           -- colorschemes --"------------------------------------------

Vim patchダイジェスト [2019/04]

$
0
0

Vimのリリースされたpatch平成最後の説明です。patchの内容を確認し、必要であれば動作確認をおこなったうえで書いています。英語を忠実に訳すよりは、Vimを使っている人が理解しやすい文章になるように心がけています。
新機能、大幅な仕様変更には、:four_leaf_clover:が付いています。
(8.1.11008.1.1240)

  • 8.1.1237: :alien:ソースコードで使用している変数名complがC++の予約済みキーワードのためコンパイルエラーになるのを修正しました。
  • 8.1.1231: :four_leaf_clover:安全であると判断した場合はスワップファイルを自動的に削除するようにしました。
  • 8.1.1230: :four_leaf_clover:Windows: vim.exe と gvim.exe の共通部分を vim.dll で共有できるようにしました。ビルド時にVIMDLL=yesを指定すると有効になります。(デフォルトはno) (関連patch: 8.1.1066, 8.1.1239)
  • 8.1.1228: :four_leaf_clover:tagfunc()を追加しました。指定した関数でタグジャンプ時に使われるタグリストの生成の制御がおこなえます。
  • 8.1.1226: :four_leaf_clover:helpテキストの{not in Vi}は邪魔なので、すべてのViオプションのリストを作成しました。(:h vi-features) ※まだ作業途中です。
  • 8.1.1224: :four_leaf_clover:Windows: 'guifont'Wを追加しました。font weightが指定できます。
  • 8.1.1221: :four_leaf_clover::filterの対応コマンドに:marksを追加しました。
  • 8.1.1218: :four_leaf_clover:タブローカルディレクトリ機能を追加しました。:tcd:tchdirで設定します。情報はgetcwd()で取得可能です。
  • 8.1.1215: :alien:make cleanが生成したsrc/poファイルを削除していないのを修正しました。(関連patch: 8.1.1213)
  • 8.1.1210: :four_leaf_clover::alien:user_commands機能を常に有効にしました。user_commands関連機能のソースコードを新規ファイル usercmd.c に集約しました。(関連patch: 8.1.1211)
  • 8.1.1205: BufReadPreがトリガーするとカーソルが移動することがあるのを修正しました。
  • 8.1.1201: :four_leaf_clover::commandの出力結果が見づらいので各項目の表示カラム幅を調整しました。(関連patch: 8.1.1204)
  • 8.1.1198: Vim終了後に端末エミュレータがbracketed paste modeになってしまうことがあるのを修正しました。
  • 8.1.1196: 並列ビルドが失敗することがあるのを修正しました。
  • 8.1.1195: :alien:Vim scriptのデバック機能関連のソースコードを新規ファイル debugger.c に集約しました。
  • runtimeファイル更新: Todo更新。helpファイル更新。他。
  • 8.1.1189: インサートモードを抜けた時にステータスラインの-- INSERT --表示が残ったままになることがある件を修正しました。
  • 8.1.1188: :four_leaf_clover:scriptversion 3以降ではVim定義済み変数(:h v:)のアクセスにv:プレフィックスが必須になりました。(関連patch: 8.1.1190)
  • 8.1.1177: :four_leaf_clover:拡張子.tsのファイルタイプをxmlからTypeScriptに変更しました。
  • 8.1.1174: if_ruby:Ruby 1.8でビルドできない件を修正しました。
  • 8.1.1159: :four_leaf_clover:Windows:インストーラーはインストール/アンインストールのサイレントモード時に$VIM/_vimrcを削除しないようにしました。
  • 8.1.1158: Jsonでエンコードされた文字列が時々最後のNULが欠けていることがあるのを修正しました。。
  • 8.1.1157: :four_leaf_clover:Unicode 12.0.0に対応しました。
  • 8.1.1156: 認識可能なUnicode emojiを追加しました。
  • 8.1.1149: msgfmtコマンドが古いとdesktopファイルのビルドに失敗する件を修正しました。(関連patch: 8.1.1150, 8.1.1154)
  • 8.1.1146: Windows: コンソール版でterminalウィンドウの色がおかしかったのを修正しました。
  • 8.1.1140: :four_leaf_clover:winnr()の引数{arg}にカレントウィンドウ基準の相対位置を指定できるようにしました。例: '1j'で1つ下のウィンドウ番号を、'2l'で右2つ目のウィンドウ番号を返します。
  • 8.1.1138: :four_leaf_clover:CompleteChangedを追加しました。インサートモードの補完ポップアップメニューが変更された時にトリガーされます。
  • runtimeファイル更新: Todo更新。helpファイル更新。他。
  • 8.1.1125: VimがlibvtermへCSIハンドラを渡していなかったために、libvtermがウィンドウ位置レポートを扱えていなかった件を修正しました。(関連patch: 8.1.1127, 8.1.1128, 8.1.1131, 8.1.1132, 8.1.1141)
  • 8.1.1123: :four_leaf_clover:complete()の第2引数{matches}に指定する補完項目リストの辞書のエントリーにequalを追加しました。この値が非ゼロの項目は常に補完候補として表示されます。
  • 8.1.1122: :four_leaf_clover:str2list()list2str()を追加しました。文字列から文字コードのリスト変換、および逆変換がおこなえます。
  • 8.1.1120: :four_leaf_clover:readdir()を追加しました。既存の関数glob()より複雑なことがおこなえます。(関連patch: 8.1.1186)
  • 8.1.1119: :four_leaf_clover:Windows: ARM64をサポートしました。
  • 8.1.1116: :four_leaf_clover::scriptversionを追加しました。Vim scriptバージョンが 2以上の場合は、.による文字列連結がエラーになります。(関連patch: 8.1.1114)
  • 8.1.1114: :four_leaf_clover:文字列の連結用に ..演算子と..=演算子を追加しました。AST(抽象構文木)化できるようにするための変更です。(関連URI: vim-jp/issue/1225)
  • 8.1.1113: :four_leaf_clover::autocmd++once引数を追加しました。指定時は1回実行されるとコマンドが削除されます。また、"nested" の別名として++nestedを追加しました。
  • 8.1.1111: :four_leaf_clover:isinf()を追加しました。正の無限大、負の無限大かどうかを返します。
  • 8.1.1110: 'listchars'が設定されていると、スペース上の文字合成の表示が間違っている件を修正しました。(関連patch: 8.1.1078)
  • runtimeファイル更新: Todo更新。helpファイル更新。他。
  • 8.1.1103: :alien:Windows: 常にwide Windows APIを使用するようにしました。
  • 8.1.1100: ファイルの最後に改行のないタグファイルが動作しなくなった件を修正しました。(関連patch: 8.1.1094)

凡例

表記意味
:four_leaf_clover:新機能、大幅な仕様変更
:alien:Vim開発者向けの追加、変更
'hoge'オプション (:h options参照)
:hogeExコマンド (:h :index参照)
hoge()組み込み関数 (:h functions参照)
v:hogeVim定義済変数 (:h v:参照)
+hogefeature (:h +feature-list参照)

方針

こちらを参照。

vimで折畳み(folding)まとめ

$
0
0

はじめに

普段Vimを使っていて,コーディング中にみたくない部分を隠す方法を考えていたのですが,コメントで折畳というありがたい言葉をいただきました.
自分の備忘録を兼ねて,まとめます.

折畳とは

IDEなどでよくある{}や[]などをまとめて隠すもので,+-でその状態が表現される(のをよく見る).
Vimでもできるということを全く知らなかった.

折畳チートシート

折畳に関するコマンドはzから始まる.
参考はこちらのページおよびvim上で:h foldをして表示されたページとする.

折畳に関するコマンド一覧は以下である.

コマンドの動作について,特に指定しない場合はすべてカーソル行とする.

コマンド動作
zf折畳作成
zd折畳削除
zD折畳を全て削除
zEページ全体の折畳みを全て削除
visual + zf選択範囲を折畳
2 + zF2行折畳
2,5 fo2行から5行を折畳
zo折畳を削除せず開く
zO折畳みを全て削除せず開く
zc開いている折畳を閉じる
zC開いている折畳を全て閉じる
za折畳の状態を切り替える
zA全ての折畳の状態を切り替える
zvカーソル行を表示
zx折畳のUndo
zX折畳のRedo
zmページ内の折畳を一段階閉じる
zMページ内の折畳を全段階閉じる
zrページ内の折畳を一段階開く
zRページ内の折畳を全段階開く
2,5 foldo2行から5行の折畳を開く
2,5 foldc2行から5行の折畳を閉じる
znファイル全体の折畳を開く
zNファイル全体の折畳を閉じる
ziファイル全体の折畳の状態を反転
zj上の折畳に移動
zk下の折畳に移動

 Vimで折畳みを使う方法

最も簡単なのは,zfコマンドで折畳を作成し,zdコマンドで折畳を削除する.
とりあえずVisual + zfで選択範囲を折畳してくれるというのも覚えておいた方が良さそうだ.

おわりに

実際に自分ではまだ使っておらず,これから使おうと思っているところですので,何かあれば教えていただけると幸いです.
また,まだVim初心者ですので,他にも便利なものがあれば教えてくれると幸いです.

Vim/Neovim の terminal mode の中で Vim/Neovim を実行するときに便利そうなやつを作った

$
0
0

つくった


画像は https://ghlinkcard.com/から生成
参考: みんなにOSSを見てもらいたい人の為に、GitHubリポジトリのOGP的画像を自動生成してくれるサービスを作った

どういうやつ?

Vim/Neovim の terminal mode で Vim/Neovim を実行すると Vim/Neovim が入れ子に起動してしまう
asciicast

これを回避するには Neovim の場合は mhinz/neovim-remoteを使うとよい
asciicast

Vim8 の場合でも clientserver 機能や terminal-api を利用すればよい
参考(clientserver): Vim の :terminal の中から外の Vim を操る方法
参考(clientserver): :h clientserver
参考(terminal-api): :terminal に関する小さい Tips
参考(terminal-api): :h terminal-api

しかしいずれにせよ、vim/nvim の中と外で実行するコマンドを切り替えねばならんというのは面倒である
なので、自身が vim/nvim の中なのか外なのかをよしなに判断して上記の回避策を実行してくれるツールを作成した
先行研究もあったが、Vim8 のみ対応のようだったので Neovim にも対応する形で実装してみた
参考: Vim in Vim しない :terminal

どうやってつかう?

こんな感じ
asciicast

あとは alias vim=vimalterみたいな感じで shell の alias 登録すれば、どこでもとりあえず vimって実行すればいい感じに vim/nvim が開く

なにをしている?

vimalterコマンドを実行しているのは vim なのか nvim なのか shell なのか

vim/nvim は terminal mode のとき、いくつか環境変数を追加してくれているので、それを利用した
環境変数 VIMRUNTIMEに runtimepath を入れてくれているようなので(ex. VIMRUNTIME=/usr/share/nvim/runtime)一つ上のディレクトリ(ex. /usr/share/nvim) の部分が nvimなのか vimなのかで判定した

もしかすると自前で vim/nvim を build してたりするとここに vim or nvimが入っておらず、上手く動かないかもしれない

neovim の場合

単純に引数を nvrコマンドに食わせて実行すればよい

vim の場合

vim は少し複雑で :termする前に call remote_startserver('hogehoge')を叩いているかどうかで挙動を変える必要がある
remote_startserver()+clientserverオプションを付けて build された vim でしか実行できない関数で、引数に指定された名前(例では hogehoge)で vim サーバを起動するコマンドである

これが実行されていれば terminal mode では 環境変数 VIM_SERVERNAMEhogehogeと入っているので vim --servername $VIM_SERVERNAME --remote file_name というコマンドを実行すれば親の vim で file_nameを開いてくれる

call remote_startserver('hogehoge')されていない場合は環境変数 VIM_SERVERNAMEは空なので他の方法を考える必要がある
今回は terminal-api を利用した

terminal-api の詳細は先に挙げた参考資料に任せるとして、とにかく echo -e \x1b]51;[\"drop\",\"file_name\"]\x07と terminal mode で実行すれば親の vim で file_nameに指定したファイルを開いてくれる

vim の実行ファイルを探索する

/usr/bin/vimが vim だといつから錯覚していた?

はい、debian 系(というか update-alternativesを使用している場合などは大抵) /usr/bin/vimとはただのシンボリックリンクである
実態はどこにいるかは辿ってみないと分からないので雑に vimに引数を食わせるわけにはいかない
ちゃんと現在 terminal mode で実行中の vim の実 path を辿ってやる必要がある
方法は愚直に PPID を辿って vimまたは vim.basic(debian で aptで入れた vim の実行ファイル名はこれになる) という文字列が実行ファイル名になっているものを探す
aptでインストールされた vim の実行ファイル名は他にも vim.tinyとかもあるが、vim.tinyは terminal mode が使用できないので除外した
他にも実行ファイル名のパターンがあれば Issue か PR をください...!
この実装をする際 shirou/gopsutilが非常に便利だった

-tab option

Vim の --remoteオプションは親でファイルを開く際、ファイルをウィンドウ分割して開く、という挙動となっており、個人的には --remote-tabの挙動のほうが好みだったので -tabオプションで制御できるようにした
弊害として、vim 側のオプションを渡す際は --を付ける必要があるが、まあ大抵こういうコマンドはそうなってるのでいいかな、と(適当)

vim --remote-tabだと、既存に空ファイルのウィンドウがあればそのウィンドウでファイルを開き、それ以外の場合は新規に tab を作成してそこでファイルを開く、という挙動をする

このとき困るのは terminal-apiでの実装で、現状 dropコマンド(つまり挙動としては --remoteと同じ)しか雑にファイルを開くときには使えないので --remote-tabを真似ることはできない
callコマンドというユーザ定義関数を呼ぶコマンドもあるにはあるが、Tapi_で始まるユーザ定義関数しか呼べない、という制限があるため現状は未実装ということにしている

今後の予定として Tapi_関数群を提供する Vim plugin を書いて、この挙動を実装する方針である

VsVimでINSERTモード中にカーソル移動できるようにする

$
0
0

Visual Studio上でVimで操作できるアドオン「VsVim」でINSERTモード中にカーソル移動できる方法の紹介です

C:\Users\ユーザー名\_vimrc

%userprofile直下に新しく_vimrc設定ファイルを作成する

_vimrc
inoremap <C-j><Down>
inoremap <C-k><Up>
inoremap <C-h><Left>
inoremap <C-l><Right>

_vimrcにカーソル設定を記述。Ctrl+ノーマルモードの移動キーにしています。

Ctrlが効かない場合

Visual Studioのキーバインド設定が優先されるので、解除します。
メインメニューのツール➞オプションから左メニューの環境ー➞キーボードから割り当てを設定します。

キャプチャ.PNG

下のショートカットキー(P)の下の欄でショートカットキーを入力すると現在使用されているショートカットが出力されます。
削除したいショートカットを以下の文字列を含むコマンドを表示の下の欄で検索し、該当するものを削除すればキーバインド設定を解除できます。

参考

https://qiita.com/Shaula/items/0264fe6fb436f2525702
https://qiita.com/zimathon/items/d02e587466dbdc90c9d3
https://qiita.com/suin/items/aec243abfda17bfac013
https://qiita.com/motty93/items/12dc20a7a5385a17063f#_reference-ffd76f09cd5abe767a16

VSCodeVimで行表示値の切り替えをショートカット化したい時のTips

$
0
0

TL;DR

  • 行表示切替の設定をショートカット登録(VSCodeVim)
  • Settings Cycler」を使用して、拡張機能内の設定を切り替える

行表示の設定とは

vimの場合

vimの場合
setnumber         " 行頭からの絶対値で表示
set relativenumber " 現在行からみた相対値で表示

VSCodeの場合

設定 > Editor: Line Numbers を切り替え

  • on / off ... 行番号の表示 / 非表示(絶対値)
  • relative ... カーソル位置までの相対値
  • interval ... 10行ごとに表示(絶対値)

表示切替の方法

ショートカットで設定を切り替えたいんだけどどうすれば...:weary:

  1. 拡張機能から「Settings Cycler」をインストール
  2. keybindings.jsonに以下の設定を追加
keybindings.json
//number/relativenumberの切り替え{"key":"f3","command":"settings.cycle","when":"editorTextFocus","args":{"id":"relativeLineNumbers","values":[{"editor.lineNumbers":"on"},{"editor.lineNumbers":"relative"}]}}

これでF3キーで切り替えができるようになります:laughing:

[忘備録]laravel5.5 データベースjoin 結合

$
0
0

laravelを用いて初めてデータベースの結合をしてみると、想像以上に簡単だったので、忘備録として残しておこうと思う。

前提

データベースにlaravelデフォルトの usersに加え、  id, uesr_id, textカラムを含む postsテーブルを用意する。

postsテーブルを作成する際はマイグレーションファイルで user_idカラムを次のように設定する。

$table->integer('user_id')->unsigned();
$table->foreign('user_id')->references('id')->on('users');

流れ

①モデル設定
②コントローラーから使う

①モデル設定

今回はユーザーが複数のpostを持つというで、以下のような関係になります。

user has many posts
posts belongs to user

この点を踏まえて、 User.php, Post.php に以下のコードを追記。

User.php
publicfunctionposts(){return$this->hasMany('App\Post');}
Post.php
publicfunctionuser(){return$this->belongsTo('App\User');}

これで準備は整いました。

②コントローラーから使う

今回はコントローラーで確認用 unction join()という関数を作ります。

Post.php
functionjoin(){#postsテーブルのuser_idが1のレコードを全て取得$user=User::find(1);$posts=$user->posts;#postテーブルのデータを全て取得$posts=Post::all();#上記で取得した「postsテーブルのuser_idが1のレコード」をひとつずつ表示foreach($postsas$post){echo$post."<br/>";}#上記で取得した「postテーブルのデータ」から結合されたユーザーの名前をひとつずつ表示する。foreach($postsas$post){echo$post->user->name."<br/>";}}

これで、適当にルート設定をし、うまく表示されていることを確認することができました。

おかしな部分がある場合、指摘していただけるとありがたいです。

coc.nvimをWSLにインストールする手順メモ

$
0
0

概要

PC(Windows10)上のWSL(Ubuntu 18.04)にcoc.nvimを入れたときのインストール手順を書き留めておく。

参考にしたwebページ

Vimの補完プラグインであるcoc.nvimが強すぎる。
coc.nvim公式のwiki

環境

環境バージョン等
OSUbuntu 18.04 @ Windows 10 64bit (Pro)
shellzsh 5.4.2 (x86_64-ubuntu-linux-gnu)

coc.nvimに必要なソフトウエアの一覧

ソフトウエア名バージョン
vim>= 8.1
nodejs>= 8.0
yarn指定なし
(vimプラグインでcocのextentionを
管理する場合は不要)

vimではなくneovim(>=0.3.1)でも動作するが、今回はvimで試したので、
その手順のみ記載する

インストール手順

apt-getでvimを取得すると、バージョン8.0が降ってくるため、ソースからビルドする必要がある。基本的にはここの手順に従えばいい。

vimのインストール
$ git clone https://github.com/vim/vim.git
$ cd vim/src
$ make
$ sudo make install

nodejsをインストールする際、coc.nvimトップに記載されているコマンド(パイプの後がsh)を実行するとスクリプトエラーが出たため、bashで実行したらうまくいった。また、bashのみだとPermissionエラーが出るため、sudoで実行。

nodejsのインストール
curl -sL install-node.now.sh/lts | sudo bash

yarnのインストールはsudoいらなかった(~/にインストールされるため?)

yarnのインストール
curl --compressed-o--L https://yarnpkg.com/install.sh | bash

筆者はdein.vimでプラグインの管理をしているので、.vimrcに以下の記述を追加して、:call dein#install()すると、coc.nvimが入ってくる。

coc.nvimのインストール
:call dein#add('neoclide/coc.nvim',{'merge':0,'build':'./install.sh nightly'})

extensionのインストール(任意)

必要ならばextenionをインストールする。coc.nvimが正しくインストールされていれば、以下のコマンドを実行するだけでよい。extentionはcoc.nvimトップの下のほうに記載がある。pythonなどの言語補完以外にも、highlightなどもあるとのこと。

extensionのインストール
:CocInstall <extentionの名前>

おわりに

試しにインストールして触ってみた感じ、かなり使いやすい感触。dein.vimと組み合わせれば、プラグイン管理には困らないと思うなぁ。。。
筆者は以下のように分けていこうと考えています。

  • vim全体の環境(Unite, Filerなど)の管理はdein.vim
  • プログラミング関連の管理(snippet,補完機能など)はcoc.nvim

句読点を「、。」→「,.」と変換する .vimrc

$
0
0

普段,句読点を「,.」を標準としています.
でも,世の中の多くの文章は「、。」で,コピペしたときにいちいち変換するのが面倒だったので,.vimrcに設定を書きました.

設定

こんな感じです.

.vimrc
" convert punctuation marks
nnoremap <Leader>cp:%s/、//g<CR> \| :%s//./g<CR>
vnoremap <Leader>cp:s/、//g<CR> \| gv \| :s//./g<CR>

変換例

ノーマルモードで<Leader>cpと打つとバッファ全体について変換します.

何も選択せずに実行
私わたくしはその人を常に先生と呼んでいた。
だからここでもただ先生と書くだけで本名は打ち明けない。
これは世間を憚はばかる遠慮というよりも、その方が私にとって自然だからである。
私はその人の記憶を呼び起すごとに、すぐ「先生」といいたくなる。
筆を執とっても心持は同じ事である。
よそよそしい頭文字かしらもじなどはとても使う気にならない。

私わたくしはその人を常に先生と呼んでいた.
だからここでもただ先生と書くだけで本名は打ち明けない.
これは世間を憚はばかる遠慮というよりも,その方が私にとって自然だからである.
私はその人の記憶を呼び起すごとに,すぐ「先生」といいたくなる.
筆を執とっても心持は同じ事である.
よそよそしい頭文字かしらもじなどはとても使う気にならない.

ビジュアルモードで行選択して<Leader>cpと打つと,選択範囲だけ変換します.

2-3行目を選択した状態で実行
私わたくしはその人を常に先生と呼んでいた。
だからここでもただ先生と書くだけで本名は打ち明けない。
これは世間を憚はばかる遠慮というよりも、その方が私にとって自然だからである。
私はその人の記憶を呼び起すごとに、すぐ「先生」といいたくなる。
筆を執とっても心持は同じ事である。
よそよそしい頭文字かしらもじなどはとても使う気にならない。

私わたくしはその人を常に先生と呼んでいた。
だからここでもただ先生と書くだけで本名は打ち明けない.
これは世間を憚はばかる遠慮というよりも,その方が私にとって自然だからである.
私はその人の記憶を呼び起すごとに、すぐ「先生」といいたくなる。
筆を執とっても心持は同じ事である。
よそよそしい頭文字かしらもじなどはとても使う気にならない。

Windows+gVim+pipenvでPython開発ことはじめ

$
0
0

はじめに

Windows+gVim+pipenv環境ではじめてPythonを開発するので、その時に行ったことをまとめました。
gvim上でオムニ補完と静的コード解析ができるまでがゴールです。

ChocolateyGetインストール

管理者権限のpowershellで下記実行

Set-ExecutionPolicy RemoteSigned
install-packageprovider ChocolateyGet

gitインストール

管理者権限のpowershellで下記実行

install-package git -providerName ChocolateyGet

Pythonインストール

管理者権限のpowershellで下記実行

install-package python -providerName ChocolateyGet

pipenvのインストール

pip install --upgrade pip
pip install pipenv

gvimインストール

kaoriya本家からgvimをダウンロードし解凍する。
https://www.kaoriya.net/software/vim/

$VIM(gvim.exeのあるフォルダ)をPATHに追加する
管理者権限で下記powershell実行

(例)kaoriya-vimをCドライブ直下に解凍した場合
$SystemPath = [System.Environment]::GetEnvironmentVariable("Path", "Machine")
$SystemPath += ";c:\vim81-kaoriya-win64"
[System.Environment]::SetEnvironmentVariable("Path", $SystemPath, "Machine")

gvimプラグインのインストール

下記プラグインを導入する。
https://github.com/davidhalter/jedi-vim
https://github.com/w0rp/ale

※$VIMはgvim.exeのあるフォルダ
※プラグインマネージャを利用している場合はそっちで導入

cd $VIM/plugins
git clone --recursive https://github.com/davidhalter/jedi-vim.git
git clone https://github.com/w0rp/ale.git

pythonファイルを開いたときのオムニ補完をjediに設定するようvimrcに追記

autocmd FileType python setlocal omnifunc=jedi#completions

gvim用のpipenvを作成し、flake8をインストールする

※$VIMはgvim.exeのあるフォルダパス

cd $VIM
mkdir gvim_pipenv
cd gvim_pipenv
$env:PIPENV_VENV_IN_PROJECT = 1
pipenv --three
pipenv install flake8

gvim用のpipenvをgvimから使えるようvimrcに追記する

let $PATH = $PATH .";". $VIM ."\\gvim_pipenv\\.venv\\Scripts"

プロジェクト作成

mkdir newproject
cd newproject
pipenv --three

プロジェクトに必要なライブラリをインストール

pipenv install hogehoge(必要なライブラリ)

pipenvの仮想環境に入る

pipenv shell

(以後の操作はこの仮想環境内で行う)

gvim起動

※pipenv仮想環境内で実行

gvim main.py

実行

※pipenv仮想環境内で実行

python main.py

豆知識

WindowsはPythonにPATHを通さなくてもPythonランチャーからPythonやモジュールの実行が可能。しかし、pipenvをpythonランチャーから起動すると何故かエラーがでるのでPATHを通してpipenvを実行する必要がある。ChocolateyGetからインストールすると自動でPATHが通る。

補完をするモジュールjediはjedi-vimの中にサブモジュールとして含まれているので別途インストールする必要はない

python-language-serverとvim-lspを用いても補完が可能だが、jedi-vimと違いpython-language-serverをシステムにインストールする必要があり、プロジェクトにインストールしたライブラリに対しての補完が効かない(なにかやり方はあるかもしれない)

pythonファイルをgvimで開いたときにそのpythonファイルが含まれるpipenv仮想環境に自動で入ってくれるプラグインvim-pipenvがあるが、Windowsには未対応である模様

Atom,Vimいい感じの設定【自分用】

$
0
0

バージョン

  • Atom 1.36.1
  • Vim 8.0

Atom設定

背景

  • UI Theme = One Dark
  • Syntac Theme = Monokai

パッケージ

  • advanced-open-file(Atom内でファイル開く)
  • atom-beauty(自動インデント整理)
  • atom-clock(エディタ内に時計)
  • autoclose-html(htmlで自動閉じタグ)
  • autocomplete-paths(パスの補完)
  • emmet(html,css入力を簡単に)
  • file-icons(超見やすい)
  • git-plus(git機能の拡張)
  • highlight-selected(同じ文字をハイライト表示)
  • linter(自動構文チェック)
  • linter-erb
  • linter-ruby
  • linter-ui-default
  • minimap(コード全体見れる)
  • open-recent(前回使用したファイルを見れる)
  • pigments(色を視覚的に)
  • platformio-ide-terminal(Atom内でターミナル開ける)
  • project-manager(プロジェクトの管理)
  • rails-snippets(Railsの補完的な)
  • show-ideographic-space(全角スペースを感知)
  • tabs-to-space(tab,space置換)
  • todo-show(todoリスト)
  • tool-bar(ツールバー)

vim設定

.vimrc
"文字色ON
syntax on"256色使うset t_Co=256"molokai大好きcolorscheme molokai

"行番号setnumber"自動インデントの幅set shiftwidth=4"背景色hi Normal ctermbg=none
hi Normal ctermfg=grey
hi Visual  ctermbg=236"カーソルつけるset cursorline
"カーソルのラインはいらないhiclear CursorLine

"カーソルの色hi LineNr ctermfg=239hi CursorLineNr  ctermfg=grey


"コメントの色hi Comment ctermfg=darkgrey

GNU GLOBAL(gtags)を使ってみた。

$
0
0

GNU Global(gtags)とは

複数のソースファイルから関数や、変数の定義元/参照元を検索、移動することができるツール
https://www.gnu.org/software/global/global.html

セットアップ

環境
ubuntu18.04
amd64

ダウンロード

下記リンクから、自分の環境に合うものを選択。
https://launchpad.net/ubuntu/bionic/+package/global

image.png

ダウンロードリンクが出てくるページに飛ぶので、それをダウンロード
image.png

インストール

ダウンロードしたdebファイルからインストール

$ cd Downloads
$ apt install global_6.6.2-1_amd64.deb

vimプラグインとして入れる

$ ~/.vim/plugin
$ cp /usr/share/vim/addons/plugin/gtags.vim ~/.vim/plugin

 準備

検索用のデータベースを作成する。
検索をかけたいプロジェクトルートに移動して、globalを実行するだけでOK。

$ cd proj/
$ gtags

vimから使う

コマンドモードで:Gtags 関数名で定義元にジャンプできる。
使い方の詳細は下記を参照

https://www.gnu.org/software/global/globaldoc_toc.html#Vim-editor

vimの設定を少しカスタマイズ

Gtagsで検索結果が複数ヒットすると、QuickFixリストで一覧表示してくれる。
Quickfixリストを使った操作を簡単にするために、とりあえず次の設定を.vimrcに追加した。

QuickFixリストにジャンプするキーバインドを追加

nnoremap [o :copen<CR>

QuickFixリストからファイルがオープンされたら、それをタブで開くようにする設定

set switchbuf+=usetab,newtab

【Vim初心者】Vimを整えたいんだが、何からすればええんや?

$
0
0

Vimを触ってみたい

VSCodeにVim拡張を入れて触ってたんやけど、Vimそのものを触りたくなったんや
けど、Vimの設定、何からすればええのか分からへん...。知ってるのは操作だけや。
っていう自分メモ。

# 環境
OS : Manjaro Linux
Linuxカーネル : 4.19.24-1-MANJARO

$ vim --version
VIM - Vi IMproved 8.1 (2018 May 18, compiled Mar 29 2019 20:08:59)
Included patches: 1-1073
Compiled by Arch Linux

まずはパッケージマネージャを用意しよう

NeoBundleが今まで使われとったらしいが、今はdein.vimが主流らしいわ。
なんや、早いらしいで。
(いつも教えてくれてありがとう。)

丁寧にまとめてくれている記事があるので、それを参考に。
dein.vimのインストール自体にハマってしまったメモ

・こんな感じのが出てくるからしっかりとコピーしてvimrcの末尾に貼っておく。

vimrcってvimの設定ファイルのことらしいで。ホームディレクトリにあるらしいから書き込んで保存やな。
(install.shが個人の環境に合わせたディレクトリパスに書き換えたvimrcの設定を吐き出すみたい。すごいね。)

$ vim ~/.vimrc

プラグインを入れる時は、NeoBundle から dein.vim に乗り換えたら爆速だった話に書かれているように、TOMLっていう設定ファイルに書き込むようにするらしい。高速起動のため、今後のためにもやってみようと思いましたが、初心者には難しい...。少し勉強してから書き直すことにします。

特に、プラグインリストの TOML 化は高速起動のために必須です。

ですので、ここでは、vimrcに直接書き込むことにします。

最初はカラースキームを設定しよう

よっしゃ!なんでも見た目から入るんが正解や!かっこよくしたるで!!
(今回はVSCodeでも使ってるayuを選びました。)

パッケージマネージャでGitHubのリポジトリ名を打ち込むだけで、後は勝手にやってくれるらしいわ
こんな感じにvimrcに書き込んでみるで

~/.vimrc
...省略
  " Add or remove your plugins here like this:"call dein#add('Shougo/neosnippet.vim')"call dein#add('Shougo/neosnippet-snippets')call dein#add('ayu-theme/ayu-vim') 

...省略

"End dein Scripts-------------------------"-----------------------------------------"              ColorScheme"-----------------------------------------set termguicolors     " enable true colors support
"let ayucolor="light"  " for light version of theme"let ayucolor="mirage" " for mirage version of themelet ayucolor="dark"   " fordark version of theme
colorscheme ayu

できた!

image.png

ええ感じや!light、mirage、darkの3種類あるけど、darkが一番やで!
(オタクブラック好きやからな...。)

ここからが本番。設定はとりあえず、コピペしよう

一体、どんな設定項目があるんかも知らへん。そんな人にはこの記事や。
何も考えず~/.vimrcにこれを書くんだ! 〜vim初心者によるvim初心者のためのvim入門〜

まずはvimの先駆者たちから設定を拝借しましょう。
最初は意味がわからなくても大丈夫です。そのうち自己流にカスタマイズしたくなってくる時がきます。

感謝しかあらへん。コピペさせてもらうで!
(~/.gvimrcに関しては、GVim用の設定なので、関係なさそうです。)
image.png

行番号が出てきたり、検索の操作も表示もわかりやすくなったで!
(ちなみに、タブはスペース4個分にしてほしい派です。そこだけ変えました。)

もう少しいじってみたい

ほな、次はこれや。Vimプラグインまでの内容で、書いとらへんもんを追記していくで。
【詳解】モテたいVimmer必見 快適にコーディングするためのvimrc解説

自分が欲しい機能

VSCodeでVimを使ってるけど、欲しい機能があるんや。
とりあえず、こいつらや。

ESCと半角切り替えしないとカーソル移動できないのが手間

fcitxを使ってるんやけど、説明してくれてる記事読んでもちゃんとできへんかったから保留。

現在の行からの移動距離がわかるようにしたい

'set relativenumber' で Vim のカーソルの縦移動とかを改善する
これは、行番号の絶対位置から相対位置の表示にするオプションがあるらしいわ。
F3で切り替えられるようにも設定しておいたで。

現在のモードがわかりやすくしたい

【詳解】モテたいVimmer必見 快適にコーディングするためのvimrc解説
lightline.vimっていうプラグインがこれやわ!

lightline.vimはVimのステータスラインをかっこよくしてくれたり、編集してるファイルの詳細情報を表示してくれたりします。
lightline.vimはインストールするだけで使えますが、カスタマイズすると編集しているファイルのファイルパスを表示したり、Gitのブランチ名表示できたりします。

インストールはdein.vimでの方法に変えて、設定は記事に書いてあるやつコピペさせていただきました。

" インストールcall dein#add('itchyny/lightline.vim')

image.png

あー!これ、Vim使ってる人の画面で見たことあるやつや!!
なんやVimmerの仲間入りした感じするわ!


Vimいじりが楽しくなってきたので、試したものを少しずつ書き留めて置こうと思います。
最終のvimrc置いておきます。

Viewing all 5720 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>