vimの抜け方(メモ)
Vimにtagsファイルを作る(多分Emacsでも大体大丈夫かと)
手っ取り早く答え
-> Vimのhelpに書いてありました。:help tags-file-format
今回話すことは大抵ここに書いてあります、英語が読めればそちらの方が参考になるかと。
又、日本語に翻訳されているものもありますので手間でなければこちらの方がわかりやすいかもです ==> http://vim-jp.org/vimdoc-ja/tagsrch.html#tags-option
こんな事始めた動機
- vimでタグジャンプを覚えたてで、楽しくなってたから
- プロダクトのドキュメントを書くにあたり、manページは時間かかるしSphinxとかわけわかめだったので何か便利なものを探していたから
- Noob-VIMMERなので
- ctagsはあるのわかってるけど、書き方があまりにも見つからなかったから(後述)
- ただ単に興味;)
tagsファイルとは
tagsファイルとは、vimやEmacsでテキストを表示した時に、「タグジャンプ」と呼ばれる機能を追加するためのファイルです。
ファイル中の単語から、説明があるものについてはそこへジャンプすることができるようになります。
例として、以下のようなテキストがあったとします。(適当に作成)
1 *help.txt* For version x.x.x23 mcUI - Main help page45 Overview: mcUI is the world first3D UI using Minecraft6 Description: This isa|Minecraft mod| which enable to use 3DUI7 Required MC version: Anything you like!(If it's supported by |Raspberry Jam mod|8 Author: Cj.bc_sd9
. .
. .
. .50 *Raspberry Jam mod* The main dependency of mcUI5152 What's this: The Raspberry Jam Mod(RJM) allows us to use MinecraftAPI like mc Pi Edition.53 Its Author: arpruss54 Repository: https://github.com/arpruss/raspberryjammod
. .
. .
. .
上から順番に見ていくことになりますが、Line:7,Raspberry Jam Mod
って何でしょう?
なんか気になりますね。
そんな時に、Raspberry Jam Mod
の文字の上で<Ctrl>+]
(default)を押すことでLine50のRaspberry Jam Modの説明までジャンプできるんです!!便利!!
ちなみに<Ctrl>+t
でジャンプ前の場所まで帰る事ができます。
という事でこのジャンプを実現するためのファイルを書いていきます。
(ちなみに身近な例で言えば、vim使用中の:help <commands>
系は大抵tagジャンプを使って開かれているようです)
え?tagsファイルならctagsあるでしょ???
え??あれC言語用じゃないの??
って事で、ctagsはc言語特化だと思っているので使わないです。普通にテキストにリンクを貼りたいんです!!
【早期解決したい人向け】便利なツールたち
このtagsファイルを生成するツールはたくさんあります。
それぞれについては把握してないので興味があれば各自調べて見てください。:help tags-file-format
の受け売りになりますがまぁ
tool名 | 特徴など | 対応言語 | URL/Path |
---|---|---|---|
ctags | 一番基本的なツール。殆どのUNIXにある | C言語のみ | - |
Exuberant_ctags | ctagsの上位互換的な?「めっちゃいいやつ」 | C,C++,Java,Fortrun,Eiffel等 | |
etags | Emacs互換っぽい。 | 色んな言語(by help: ) | - |
JTags | JavaによるJavaのためのツール | Java | http://www.fleiner.com/jtags/ |
ptags.py | Pythonによるpythonのための(ry | Python | pythonのソースディレクトリーの Tools/scripts/ptags.py |
ptags | PerlによるPerlのたm(ry | Perl | http://www.eleves.ens.fr:8080/home/nthiery/Tags/ |
gnatxref | gnatパッケージの一環らしい | Ada | http://www.gnuada.org/ (なんか移動したっぽい?情報求) |
今回はこれらのツールなしで手動で作っていこうかなと思います。
【本題】tagジャンプができるようにするまでの流れ
- 元のドキュメントのファイルを作る
- 新たにテキストファイルを作り、tagsファイルとする
- 元のドキュメントのファイルを開き、
:set tags=<file_name>
でtagsファイルの指定を行う - そうするとほら、
<Ctrl>+]
で飛べるはずでっせ!!
1.元のドキュメントのファイルを作る
これは特にいうことないですね。ただ単に、お好きなエディタ(話の流れ的にVimかEmacsの人が多そうですが)でドキュメントを書きます。:help
を見ている限り、の話にはなりますが、tagジャンプ元はpipe|
で囲っている場合が多いようです(|tags-file-format|
等)
2. tagsファイルを作成する
ここが本題となります。
tagsファイルは基本的に次の書式で書かれます。
1. {tagname} {TAB} {tagfile} {TAB} {tagaddress}
2. {tagfile}:{tag name} {TAB} {tagfile} {TAB} {tagaddress}
3. {tagname} {TAB} {tagfile} {TAB} {tagaddress} {term} {field} ..
{tagname}
=> タグの識別子です。何でも良いそうな。ただし<TAB>
は入ってこれないそうです{tagfile}
=> tagname
を定義している部分の入ったファイルです。同じく<TAB>
ダメ、絶対{tagaddress}
=> タグが見つかった際の処理をExコマンドで書きます。いくつか制限はあるものの、ある程度は自由なコマンドが使えます。ただし、Posixは、ラインナンバーと検索のみを提供するようです。{term}
=> ;"
である。たったこれだけ。viとの互換性を図るため、その行のこれ以降をコメントアウトしている。{field}
=> なんかよくわかんなかった
とりあえずまあ、これで作成してみます。ファイル名は何でもいいですが、後述しますがtags若しくはtagだと楽です
3.ドキュメントを開き、tagsファイルを指定する
$vim document.md
などで開き、:
を打ってコマンドモードにしてからset tags=<あなたのtagsファイルのパス>
とします。
ちなみにデフォルトのtags
は./tags,tag
となっているため、2.の時点でtagsファイル名をtags若しくはtag
にしていた場合、この作業をせずともtagsファイルが認識され、<Ctrl>+]
で動くはずです。(戻るときは<Ctrl>+t
です)
4.Fin!!
やったね!!これでtagsファイルがとりあえずできましたよっと。
これでもう、vimで上下する苦労は(少しは)無くなりますね(きっと)!!
今回のポイント
- tagsファイルの書式を覚える!
- なるべくなら
tags
かtag
という名前でtagsファイルを作成して、自動で使えるようにする! - 自動でtagsファイルを使ってもらうためには、tagsファイルとドキュメント本体を同じ階層におく!
:help
をもっときちんと読む。ggrよりもはるかに高品質な情報がある。
続きの記事
ちなみに現段階だと色が全くなくて殺風景というかなんか読みづらいので、次の記事ではその色関連を少し書きます!(.vimファイルとかの作成はしないので悪しからず)
続きの記事 -> [作成次第リンクつけます]
現状わからないこと、課題
- tagの名前を複数単語に対応させる方法
悪ガキのあとがき
今回例で出てきたmcUIというのは、実際に現在絶賛開発中の、Minecraftを用いてパソコンに新たなUIを作ろうというプロジェクトです。現段階ではまだ形になっていなさすぎてわけわかめな説明だと思いますが興味があればぜひ見ていってください -> Cj-bc/mcUI
http://ctags.sourceforge.netが本家なのですが、更新されない可能性が高いということでUniversal ctagsのURL( https://ctags.io/ )を置き換えていれました。@mattnさんありがとうございます! ↩
vimでのsudoedit
rootにしか書き込み権限がないファイルを編集する際にsudoeditを使っています。制限モードのvimを使うならrvim
あるいはvim -Z
をSUDO_EDITOR
に設定します。
ESCを押すとIMEをOFFにするようなシェルコマンドを仕込んでいるとエラーを吐くため、-u
オプションで違うファイルを読み込ませたり、そもそも読み込みをスキップさせたりします。vim -Zu NONE
, vim -Zu NORC
, vim -Zu .rvimrc
。NONEは初期化ファイルと標準プラグインを読み込みません。NORCは初期化ファイルだけ読み込まず、標準プラグインは読み込みます。
neovimの場合も同様です。rnvimなんてものはありませんが-Z
で制限モードです。-u
で別ファイルを読み込むが事ができます。neovim場合は標準で諸々の設定がされているので、export SUDO_EDITOR='nvim -Zu NORC'
で良い感じになります。色が付くなど。
sudoedit /etc/X11/xorg.conf.d/40-libinput.conf
Vimコマンドを自作してみる、という今年の目標を達成するためにVim scriptに触り始めてみたら、かなり楽しいー!(コマンドでの引数の受け取り方)
最初に
今年密かに立てた目標の一つがVim scriptを書いてみること。Vimで自作コマンドを作ってみること。
Vimを使っていながらこれらのことを敷居の高いものと勝手に感じていた自分を見直すため、Vimで基本的な部分を調べながらサンプルを書いてみました。
(今回は主に、関数における引数の受け取り方について調べました)
なお、これは個人的な備忘録(個人的学習ノート)となります。
ここである程度、基本的な事柄に触れたら、vim-jpのドキュメントを一通り読んでみて理解を深めていこうと思います!
コマンドラインコマンドを定義してみる
作業ディレクトリ内でsample.vim
という名前で作成し、下記のように記述してみます。
command!-nargs=0 Test echo "This is Test!"
同じディレクトリ名でもう一つVimを開き、:source sample.vim
と打ってファイルを読み込んでから、:Test
とVim内で打つと、This is Test
と表示されます。
とやっても良いのですが、sample.vim
を開いているエディター内で:source sample.vim
を打てば、自分を読み込んでそのまま:Test
と打てるようです。楽ちん!
ちなみにcommand!
とやると、コマンドを再定義することになり、既存のコマンドの内容が上書きされることになります。
上の処理を実行したあとで、Testコマンドをcommandに書き換えて、再度:source sample.vim
を打つと、既にコマンドがあります、というエラーが表示されます。
基本となる関数の作成
処理する内容にもよりますが、処理内容はだいたい関数化するようです。
基本的な関数の呼び方は下記の通り。
command!-nargs=0 Hello call Hello()function! Hello()
echo "Hello!!"endfunction
ちなみに関数名をs:Hello
とした場合はローカル関数になるようです。
関数の引数について
引数を一つ取りたい場合
引数を取る関数を作成する場合、下記のように引数部分に<f-args>
を使うようです。
また、関数内で引数として取得した変数についてはa:
が付くようなので、こちらも忘れないように気をつけます。
command!-nargs=1 Hi call Hi(<f-args>)function! Hi(name)
echo "Hi " . a:nameendfunction
以上の関数を記述した後、vim内で自身を読み込み(:source sample.vim
)、コマンドを打ってみると下記のようになります。
:Hi Merry" => Hi Merry
引数を0、もしくは1つ、取りたい場合
引数を0 or 1つで取りたい場合は-nargs=?
とするようです。
この場合、関数での引数は可変長引数である...
に変更する必要が出てきます。
(名前付き引数では、渡されないとエラーとなります。)
なお、取得した引数については、a:0
で引数の数、a:1
で引数の中身を取得できるようです。
command!-nargs=? Hi call Hi(<f-args>)function! Hi(...)ifa:0>=1
echo "Hi " . a:1
echo a:0
echo a:1else
echo "Hi..."endendfunction
実際に実行してみた結果は下記。
:Hi Merry" => Hi Merry" => 1" => Merry
引数を一つだけ取りたい場合
-nargs=1
とするようです。
この場合、引数を付けないと"引数が必要です"とエラーが表示されます。
command!-nargs=1 Hi call Hi(<f-args>)function! Hi(name)
echo "Hi " . a:nameendfunction
関数の引数を可変長引数にしても、同じように書けるようです。
(もちろん、引数は付けないとエラー)
command!-nargs=1 Hi call Hi(<f-args>)function! Hi(...)
echo a:0
echo "Hi " . a:1endfunction
もっとたくさんの引数を取りたい!
-=nargs=*
で取れるようです。
関数の引数は可変長引数とし、
a:0で引数の数、
a:nでn番目の引数、
a:000ですべての引数の配列を取得できるようです。
command!-nargs=* Hey call Hey(<f-args>)function! Hey(...)ifa:0>=1
echo "name count : " . a:0letres= ["Hey! "]let nlist =a:000fornin nlistcall add(res,n)endfor
echo join(res)else
echo "Hey..."endendfunction
for文を使いたくて上のように書いてしまいましたが、extend関数を使えば、リストにリストを連結することができるようなので、下記のような書き方がベターですかね。
command!-nargs=* Hey call Hey(<f-args>)function! Hey(...)ifa:0>=1
echo "name count : " . a:0letres= ["Hey! "]call extend(res,a:000)
echo join(res)else
echo "Hey..."endendfunction
実行結果は、下記のようになります。
:Hey
" ⇒ Hey...:Hey Merry Atom Bob" ⇒ Hey! Merry Atom Bob
引数を1個以上パターン
-nargs=+
を使うよう。
引数なしだとエラーになります。
command!-nargs=+ HeyHey call HeyHey(<f-args>)function! HeyHey(...)ifa:0>=1
echo "name count : " . a:0letres= ["Hey! "]call extend(res,a:000)
echo join(res)else " 引数なしはエラーになるため、ここには到達しない
echo "Hey..."endendfunction
可変長引数じゃないパターン
command!-nargs=+ HeyHey2 call HeyHey2(<f-args>)function! HeyHey2(n1, n2, n3)letres= ["HeyHey! ",a:n1,a:n2,a:n3]call extend(res,a:000)
echo join(res)endfunction
ひとまず今回はここまで。
実際に触れてみることで、一気に身近に思えてきました!
今まではVimの自作関連は遠目に見ているだけでしたが、今年は自分からも積極的に作っていけたらと思います。
参照
vim-jp >> Hack #158: ユーザコマンドを定義する
ATOMって行番号指定してコマンドラインから開けなくね?引数ないし。 =>開けるらしい。
概要
vimみたいに行番号指定してatomで開きたい!!!と思っていたので、プルリク漁ってみた。
=> 見つかって指定の仕方もわかったので、色々できそう。
どうやって指定するのか
Vimの場合
vim - c 45 test.php
と指定するとコマンドラインから行を指定して開くことができる。
ATOMの場合
atom test.php:45
とこうして、ファイル名の後に「:」(コロン)を入れてその後に行番号を指定するとその行にカーソルを合わせてできるそう。その変更を取り込んだプルリクエストは以下の通り。なんなら2015/9/4である。気づくの遅かったな・・・。
これができるようになったことでやりたかったことをできるのである。
今まではSilver Searcherで検索したものをさらにPecoで絞るといったことをやっていた。
なぜならAtomではできなかったことだからである。ではできるとわかったので作ってみた。
エラー処理書いてないのであとで追記する予定。
function agatom (){out=$(ag $@ --ignore-dir caches_ux | peco --query "$LBUFFER"| awk -F : '{print $1":"$2}');
atom $out;}
※ PecoとSilverSearcher依存。
[覚書]lightline.vim の カラースキーマの1つ Tomorrow のカスタマイズ
注意
このポストは自分に対する覚書です
内容
ステータスライン/タブラインのカスタマイザプラグインとしてlightline.vim
を常用しており、カラースキーマはTomorrow
を使っている。理由は、デフォルトで提供されているカラースキーマの中で一番コマンドプロンプトと相性がよい為。しかし、タブラインがちょっとみづらいのでTomorrow.vim
を直接編集して対応した結果をここに記す。
" ..." 黒文字、白背景を、白文字、黒背景に変える(環境によっては色は違うかもしれない)" let s:p.tabline.tabsel = [ [ s:base2, s:base023 ] ] これがオリジナルlet s:p.tabline.tabsel = [ [ s:base023, s:base2 ] ]
本来自分用のカラースキーマを定義してそっちでやるべきなんだろうけど、一行だけだし、直接いじってしまったほうが楽チンかなと。んで、いろんな環境にlightline.vim入れるときに何度もどこをどう編集するんだっけ?となってしまったので、覚書としてここに記しておく。
fzf.vimを使ってctags検索をしてみる
ctagsの検索にfzfが良いよと教えてもらったので、試してみました。
Install
fzf
https://github.com/junegunn/fzf
まずはHomebrewでfzfをインストール
$ brew install fzf
.vimrcに追記
set rtp+=/usr/local/opt/fzf
fzf.vim
https://github.com/junegunn/fzf.vim
fzf.vimのGithubを見ながらインストール。
上記サイトではvim-plugを使用していたけど、私はNeoBundleを使っているので下記のよう.vimrcに記述してインストール
NeoBundle 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' }
NeoBundle 'junegunn/fzf.vim'
設定
.vimrcに下記を追加しました。
" deniteと合わせて上部に表示
let g:fzf_layout = { 'up': '~40%' }
" <C-]>でタグ検索
nnoremap <silent> <C-]> :call fzf#vim#tags(expand('<cword>'))<CR>:
" fzfからファイルにジャンプできるようにする
let g:fzf_buffers_jump = 1
良さげなのでしばらく使ってみます。
Vimでカーソルキー入力時にABCDが出力されてしまう
当記事では根本的な問題解決には至れていません
Vimでカーソルキー入力時にABCDが出力されてしまう
以下のブログ等、ちょいちょいみなさんを悩ます現象のようです。
Vimで方向キー入力時にABCDが記述されるエラー対処
私も年末に.vimrc
を色々いじっていたら、気付いたら当事象に陥ってしまいました。上記ブログ等を参考にさせてもらって解決を試みましたが、私の環境での事象を解決することはできませんでした。でも、私は意識が高いので、『インサートモードでカーソルキーを使うのは甘え』と自らを誤魔化してこの問題を放置していました。
悔い改める
志低ければ、怠惰に流れる。
- 松下幸之助 -
というわけで、意識が高いどころか意識が低いことを指摘されてしまったので、原因の究明を行いたいと思います。
って言うか、インサートモードでもカーソルキーで移動したいし!
原因の特定
犯人探し①
まずは.vimrc
をリネームしてスッピンのvimの状態で動作確認してみました。インサートモードに入ってカーソルキーを押してもちゃんとカーソルが移動する!AとかBとか出てこない!
ひとまず.vimrc
の設定であることは確定しました。
犯人探し②
あとは.vimrc
の中身を全部コメントアウトし、少しずつコメントを外していくという地道な作業。結局犯人は以下の記述でした。
" NORMALモードに戻るときにIMEをOFFにする
function! ImInActivate()
call system('fcitx-remote -c')
endfunction
" ★こいつが犯人らしい★
inoremap <silent> <C-[> <ESC>:call ImInActivate()<CR>
" ★これも試してみたけどダメだった★
inoremap <silent> <ESC> <ESC>:call ImInActivate()<CR>
インサートモード状態で、全角入力状態でCtrl + [
を押してインサートモードを抜ける際に、全角入力をOFFにするための記述です。
暫定対応
以下のようにしてみました。これだと問題の事象は発生しませんでした。
" NORMALモードに戻るときにIMEをOFFにする
function! ImInActivate()
call system('fcitx-remote -c')
endfunction
" ★これらはOKだった★
inoremap <silent> jj <ESC>:call ImInActivate()<CR>
inoremap <silent> っj <ESC>:call ImInActivate()<CR>
inoremap <silent> <C-j> <ESC>:call ImInActivate()<CR>
まとめ
冒頭にもあるとおり、原因の特定には至れませんでした。絶対的なvim力不足です。いつか原因究明ができた時には当記事にコメント追記したいと思います。
ひとまず、『Ctrl + [
とか普段使わんし!』と自分を誤魔化しつつ(実際あんまり使ってない)、上記3つのマッピングでしばらくはしのいでいこうかと思います。
Vimの正規表現を知ろう #1
行頭がdiffで始まっていて行末が .cpp, .c, .h でない行にmatchするVimの正規表現。
^diff \%(\%(\.\%(cpp\|c\|h\)$\)\@!.\)*$
以下help参照。
:h \@!
その他helpは以下参照。
:h /^:h /\%(:h /\.:h /\|:h /.:h /*:h /$
MacVimをMarkdownプレビュー&編集ツールにする
必要なプラグイン
- previm
プレビュー用のプラグインです - vim-markdown
プレビューするだけなら必要ないですが、シンタックスハイライトなど便利です
必要な設定
主にPrevim用の設定です。
" {{{ previm plugin settings"---------------------------------------------------letg:previm_open_cmd ='open -a Google\ Chrome'
augroup PrevimSettings
autocmd!
autocmd BufNewFile,BufRead *.{md,mdwn,mkd,mkdn,mark*} setfiletype=markdown
augroup END" }}}
書いて保存する
##見出し
*リスト1
*リスト2
プレビューする
バッファを開いた状態でPrevimOpenコマンドを実行すると
ブラウザが開いてMarkdownで書いたドキュメントをプレビューできます。
以上です。
意識の低いVimの始め方
まずは邪道でいい、Vimもただのツールだ
暴論だけどhjklキーでカーソルを左下上右移動、という操作はひとまず忘れましょう。
上下左右キーがあるのに上下左右キーを使わない、という直感に反する操作でVimを使わないなんてとんでもありません!
仮にVimを使って満足いかなかったら、きっとEmacsに走るのだから!
その時にhjklキーは足かせになる可能性もあるのだから!
などという言い訳はここまでにして、意識の低いVim本題に入りましょう。
文字列は検索しようぜ
ここではWindowsユーザーを想定します、なぜなら私がWindowsユーザーだから。
いわゆるテキストエディタ、特にWindows系の愛用ソフトを使っている場合、文字列検索機能を使わないで、ついつい「一行一行、目で追って探してしまった」なんて経験はありませんか?
Ctrl+Fで検索窓が出てくるケースは多いですが、メニューのキーボード操作だとAlt+eのあとにfなど操作しづらいです。
しかもマウス操作だったら、もっと面倒くさいですよね?
こんなの誰も使いたいとは思えません、そんなオカルトあり得ません。
しかしRegular Expression、いわゆる正規表現を使おうとしたら、さらに追加の操作(正規表現の機能有効化など)が必要になったり、下手したら正規表現検索そのものが実装されていなかったり。
検索機能が無茶苦茶優れているコンピュータを使いながら、その開発者…それこそ世界で上位1割に入る人…が検索機能を実装する時に検索を使っていないなどという本末転倒に陥ってる人、あなたにも心当たりはありませんか?
いや絶対いるでしょ?ソースは俺だよ、文句あっか!
いよいよVimの話
Vimには「NORMALモード」「INSERTモード」その他のモードがあり、そしてNORMALモードで起動して、すぐに文字を入力しても編集できません。
それで「なんだこれ面倒くさいな」というのは、おそらく誰もが通る道です!(主語がでかいのは仕様)
ここで「無条件にINSERTモードに入るのはもったいない」という話をします。
Vimの自然な入り口としては、Vimはテキストビューアだと考えろというのがこの記事の主旨です。とりあえず、これを読んでいるあなたも、テキストビューアだと決めつけてください、少なくともこの記事を読み終わるまでは。
その証拠として、この記事ではINSERTモードを使いません。
カーソル上下左右だけなら、とりあえず文章編集できません、PageUp PageDownでもできませんね、普通に使えるはずです、この辺は好きに使ってください。
他の操作は、ちょっと何が起こるかわからないから保留でお願いします。
え?キーボードはPFUのHHKBを愛用?そんなあなたはさっさとこの記事を閉じてください!これ以上読むのは時間の無駄ですよ。
さてVimで文字列検索しよう
とりあえずWindows10のWSL(Windows Subsystem on Linux)でUbuntuを導入しbashを使っている、と想定します。
そしてサンプルファイルはbash初期設定ファイル .bashrc にします。
vim ~/.bashrc
これでファイルの中身が表示されますよね、と釈迦に説法してから、設定されているaliasを探しましょう。
(ここが最重要)NORMALモードで、以下のように入力してください。
/alias
「頭に / を付けて検索したい文字列(ここではalias)」です。
Enterキーを押したら最初の alias 文字列がある場所へと飛んでくれます。
次を探すなら n、nextの略でしょう。Shiftキーを併せて N にすれば前の場所に飛びます。
ねえ、これってテキストビューアとしては優秀じゃない?ってのがこの記事の主旨です。
編集もできるテキストビューアVim
さて、あなたの .bashrc にあるかどうかはわかりませんが
#alias dir='dir --color=auto'
このように # でコメントアウトされた dir を有効化、すなわちコメントを示す # を削除したい、とします。Windowsのコマンドプロンプトに馴染みすぎてたら使う人もいるかもしれないですからね。
検索するのは、最重要なので繰り返しますが、NORMALモードのままで
/#alias
とりあえずこうです。
Vim魔界の民からは「ここで正規表現の説明に移れよ」ほか多数の突っ込みが入りそうな気がしますけど、主旨はとりあえず意識低く使うのが目的なのでご容赦ください。
さてここで目的の文字列、具体的にいうなら「#alias」は、もしかしたら最初にヒットするかもしれません。nとNで探しても見付からないかもしれなません。
ここで見付からない場合「#alias」文字列はありません。そして「ありません」と断言できるのが、文字列検索の利点です。それこそWordやExcel、Chreome、メーラーでも、検索機能があって見付けられない場合は「ありません」と断言できます。
もちろん「# alias」とスペース混じりの文字列は当然あるかもしれませんね、その辺も抑えたい方は、後の補足を読んでください。
目的の場所「#alias」に到着したら、おもむろに x キーを押してください。
私もxがなんの略か知らないですが、バッテン付けるとでも思っておけばいいんじゃないでしょうか?
これで「検索文字列行頭の#」を一文字を消してくれます!
alias dir='dir --color=auto'
このように無事、設定ファイルの編集はできます。
ここで保存するかしないかは、はあなたにお任せします。
念のために「:wq」で「ファイルにwriteしてquitして」、「:q!」で「quitしろ!」です。
ちょっとだけ意識高めの人のために
コメントの後に含まれる空白を許したい、具体的には「# alias」なども含めたいなら
/#\s*alias
のように検索します。
ここで「\s」が「空白系文字タブ含む」、「*」が「0回以上の繰り返し」です。
コレ、0回以上の繰り返しなので、空白がなくてもヒットしますので、定型文として覚えちゃうのもアリでしょう。
これ以上、意識低いままでいたいなら Vim公式ドキュメント 簡単な検索を読んでください。
公式ドキュメントさえ抑えれば、どれほど意識低くても強者っぽい振る舞いができます!
なんといっても、中二病表現をするなら原典ですから。
個人的な見解として、正規表現はどいつもこいつも方言がキツいので、Vimに限らずハマりすぎに注意かなと。
変に懲りすぎない方がよさそうな印象があります。
行頭行末を活用しながら検索や置換を素直にできなければ、なんらか言語を使った方がいいかなって感覚です。
別に計算コストの特筆メリットはないと思います。
ここで、当記事の前言撤回です!
記事の冒頭で書いた「hjkl」で上下左右に移動する操作は、今すぐ思い出してください!
そして「hjkl」の上下左右移動は、使える場所ならガンガン活用してください!
TweetDeckでも、マストドンWeb-UIでも、ブラウザ経由gmailでも上下移動はjとkです。
Googleドライブに至ってはhjkl全部使えますよ。
まったく、みんなほんとにHなJKへのLove過剰なんだから…
蛇足だけど、hは本当にhidariの略じゃないかと思うくらい有名どころのソフトに浸透してます。
たとえばCtrl+hでBackSpaceは、そこそこ由緒正しい操作の印象を受けます。
bashやvimは言うに及ばず、Windowsソフトでも秀丸エディタ、Visual Studio Code、日本語変換ATOKのATOKキーバインドあたりはCtrl+hでBackSpaceの動きをします。
個人的にはCtrl+hをBackSpace統一してほしいのですが、Chromeが「History」に割りあてていたり、他のソフトも使えない場所が多すぎて間違いなく発狂しますので、hjklへの敬愛をこめつつ、今は牙を研ぎましょう。
もちろん若いあなたが、明るい将来を作ると信じていますからね!なんて言葉は胡散臭い政治家っぽいな
さいごに
こういう内容、誰かQiitaに書いてそうで書かれてなかったので、わかる範囲で書きました。
ぶっちゃけ自分もVim初心者です。
我ながらこれは酷いと思ってますが、この記事は基本VS Code使って書いています!
まあ「意識低く」っての、どんどん流用してほしいです。
他の便利ソフトで似たような記事も充実するといいなぁって思っています。
理念とか理想は大切だけど、初学者にとって一番大切なのは「目の前にあるモノを使えるか否か」ですから。
特にEmacs関連は充実してほしいな…(チラッ)
参考文献
- 「まんがでわかるLinux シス管系女子」Piro著
シス管系女子は、自分電子書籍で買ってしまいましたが紙の本で買ったが融通がきくかもしれません。
Vimに限らずLinuxの入り口、取っ掛かりもわからない人には無条件でお勧めします。
注:宣伝してても、作者との癒着どころか利害関係すらありません。むしろ利害関係や賄賂ほしい…
HHKBユーザーのためのVim日本語チートシート作った
HHKB Pro2(US)を購入したので、HHKB用のvimの日本語チートシートを作成した。
JIS配列のキーボードを使っている方は、こちらを見てね!
Vim日本語チートシート作った
テンプレート作成
やっぱりこの図を元にして作成する
HHKB US配列ならこのままでいいじゃないか!って思ったけどよーく見ると
HHKBの配列とは違っている。
HHKB配列に修正する
英文字を取り除く
雛形となるシートの作成。キーマッピングを独自に変えていて、vimデフォルトマッピングとは異なる方は、
こちらの雛形から自分専用のチートシートを作成してください。
日本語化
日本語化して完成です。HHKBでvimを利用している方は、是非使ってください。
おまけ
海外のプログラマーの方は、キーキャップを変えてオシャレしている方が多いんですが、日本にはそんな文化があまり無いらしい。
更には、HHKBのキーキャップ(Topre)のおしゃれキー自体が世界的に見ても少ないらしい。
そんな中、数少ないTopreおしゃれキーキャップを販売している店を見つけたので、紹介します。
PFU
HHKBの販売元。
キーキャップ単体でも販売していて、無刻印セット、刻印セット、赤いコントロールキーなどが売ってます。
KBDfans
カラフルな色のキーとかインベーダーっぽい刻印の入ったキーを売ってる。
あとPro2をType-S化するためのリングも売ってる。
k3kc
Artisan keycapと呼ばれる、造形されたキーキャップを売ってる。
1つ300ドルのキーキャップとかある。
MimicCables
キーキャップではないが、おしゃれなUSBケーブルを売っている。
色と長さと端子とカールコードにするかどうか等を決めてオーダーするらしい。
Vimで折角tagsファイルを作成したドキュメントに色をつけたい!!
始めに
- tagsファイルって何じゃそりゃって方はこの記事を見てみてください、もしかしたらわかるかもしれません(保証はしない)
- この記事はまとめ編ではありません。結果どうしろっていうの、って方は一番下の
結果
までジャンプしてください - この記事では、ハイライトやカラースキームを作成するわけではありません。ご了承下さい。
お寿司もください
動機
前回の記事のようにしてtagジャンプできるようになったはいいものの、現状としては全部同じ色で表示されており、どれがtagジャンプできんのかわかりづらい。
なので、:help
で表示すると使われているようなカラーリングが使いたいなって思ったのがきっかけ。
まず始めに
- ハイライトの自動化は
filetype
に応じて行われる。 filetype
を調べるには:set filetype?
を実行すれば良い- 逆に
filetype
を設定するには:set filetype=<filetype名>
を実行すれば良い
以上のことを踏まえて、以下のことをしてみた
:help
で表示されるファイルのfiletype
を調べる- 自分のドキュメントの
filetype
をそれに合わせてみる - 思った通りのハイライトが適応される!(はず)
1. :help
で表示されるファイルのfiletype
を調べる
これは簡単な話で、:set filetype?
を実行すれば良い。
結果:
:setfiletype?>filetype=help
--> 求めているハイライトのfiletype
はhelp
だということがわかった
2. 自分のドキュメントのfiletype
を合わせてみる
これも単純作業、ドキュメントを開いて:set filetype=help
--> おお、きちんと表示された!!
↑上段: 設定後
↓下段: 設定前
え、じゃあこれでよくね??
ところが
次なる課題: どうやってfiletypeを固定するのか
毎回毎回:set filetype ~
とかやってるんじゃ効率悪いし何より配布とかもできない。
それは困る。
何とかして固定しなければならないわけで。
まず
- 普段はfileの拡張子からfiletypeを判断をしている
ということから、とりあえず拡張子を.help
とかして見たが何も起こらず。
ちなみに:help
で表示されるヘルプページの拡張子は.txt
であるがこれまた何も起こらず。
レッツgoogle!!
解決法: filetypeの固定 => modelineを使う!
が問題発生
結局、google先生に聞いてもよくわからなかったので素直に:help filetype
した。ええ、しましたとも。
そしたら*filetype*の欄の後ろの方に以下の記述があった。
If the file type is not detected automatically, or it finds the wrong type,
you can either set the 'filetype' option manually, or add a modeline to your
file. Example, for an IDL file use the command: >
:set filetype=idl
or add this |modeline| to the file:
/* vim: set filetype=idl : */ ~
どうやらmodefileとかいう機能を使うために、ファイルの中に/* vim: set filetype=<設定したいファイルタイプ> : */ ~
と書けばいいようで。
今回は、設定したいfiletype=help
なのでidl
をhelp
に書き換えてみる。
modelineが何なのかとか細けぇこた置いといて(=>[あとでこれについて説明貼ります])、説明の通りにやってみる。
どうやらファイルの最初or最後に書けばいいようで、とりあえずファイルの初めに置いてみる。
で、ファイルを一旦閉じて開き直す。
あれれ、色がついてない...filetype
を確認するも、
:setfiletype?>filetype=text
とのことで変わっていない...
modeline
を簡単に調べる
もうどうしようもないので:help modeline
しまして。
The number of lines that are checked can be set with the 'modelines' option.
If 'modeline' is off or 'modelines' is 0 no lines are checked.
ふむ、どうやらmodeline
がoffなのか、modelines
が0なのかが問題なようだ。ちなみに最初modelines
についての記述に気がつかなくて1日ぐらい悩んだ
:set modeline?
と:set modelines?
してそれぞれの値を見てみた。
するとどうだろう、modeline
の方はonになっていたもののmodelines
が0になっていた。
つまり、modeline
の機能自体はonになっていたものの、読み込む行数が0行だったので読み込まれていなかったということだ。わかりづれぇ
と、いうことで、:set modelines=5
をしてみた。が、変わらない...:set modelines=5
をした後、一度開き直さなければいけないから、設定が変わってしまっているのかもしれない、ということで、
.vimrcにmodelines=5
を書いてみた結果がこちら:
おお!!できた!!!
ということで、色がつきました、とさ。
(ちなみにこの後、/* vim: set filetype=help : */ ~
はファイルの末尾に移動した。:help
で表示されるテキストも、modelineを末尾に書いてあることが多かったため。)
結果
/* vim: set filetype=help : */ ~
をファイルの先頭or末尾に置く:set modeline
、:set modelines=(0以外の数)
をvimre
に書く
dein.vim 触ってみた
NeoBundle からdein.vimへ移行してみた
Neobundleは今後はバグフィックスのみになるとのこと
https://github.com/Shougo/neobundle.vim
Note: Active developement on NeoBundle has stopped. The only future changes will be bug fixes.
Please see Dein.vim -- A faster, well-tested plugin manager for Vim and Neovim. It can do everything NeoBundle does, including asynchronous installs.
なので私も合わせて移行してみた、
READMEに記述されているが、
下記手順
vimファイルを格納先を作成する。
mkdir ~/.cache/dein
git hubからdein.vimを取得してくる。
install.shを取得
curl https://raw.githubusercontent.com/Shougo/dein.vim/master/bin/installer.sh > installer.sh
install.sh をパスを指定して実行
sh ./installer.sh ~/.cache/dein/
これで、.vimrcに記述する、vimshellが吐き出される、
パスはinstall.shを設定したものが出力される。
便利!
vi .vimrc
syntaxoncolorscheme molokaisettabstop=4setshiftwidth=4setencoding=utf-8setincsearchsetignorecasesetsmartcasesethlsearchsetbackspace=indent,eol,start" コピペさんsetclipboard=unnamed,autoselectif&term=~"xterm"let&t_SI .="\e[?2004h"let&t_EI .="\e[?2004l"let&pastetoggle="\e[201~"function XTermPasteBegin(ret)setpastereturna:retendfunctioninoremap<special><expr><Esc>[200~ XTermPasteBegin("")endif"dein Scripts-----------------------------if&compatiblesetnocompatible" Be iMprovedendif" Required:setruntimepath+=/home/ami/.cache/dein//repos/github.com/Shougo/dein.vim" Required:if dein#load_state('/home/ami/.cache/dein/')call dein#begin('/home/ami/.cache/dein/') " Let dein manage dein " Required:call dein#add('/home/ami/.cache/dein//repos/github.com/Shougo/dein.vim') " Add or remove your plugins here:call dein#add('Shougo/neosnippet.vim')call dein#add('Shougo/neosnippet-snippets')call dein#add('tpope/vim-endwise')call dein#add('tomtom/tcomment_vim') " Required:call dein#end()call dein#save_state()endif" Required:filetype plugin indent onsyntax enable" If you want to install not installed plugins on startup.if dein#check_install()call dein#install()endif"End dein Scripts-------------------------
これでとりあえず、
Ruby でコーディングする時に、def とか入力すると自動で、 endが入力されたり、
自動でインデントがあったりと、便利である。
ローカル開発環境URLをlocalhost:3000以外に変更する
やりたいこと
localhost:3000
ではなくアプリ名:3000
でローカルでの動作確認出来るようにしたい
↓↓↓今回やりたいことのゴール
背景
ローカルで自分の作ったRailsアプリの動作確認の際に毎回localhost:3000
にアクセスするが、localhost:3000
でデフォルトのままだと何かイケてない気がするアプリ名:3000
でアクセス出来るようにしたい
手順
*Macを想定
1.etc
ディレクトリ以下のhosts
(ローカルホストの設定ファイル)を書き換える
# ターミナルで以下のコマンド実行>sudovim/etc/hosts
2.hostsファイル内のローカル・ループバック・アドレス(127.0.0.1部分)の同じ行にアプリ名を追記する
# hostsファイル内### Host Database## localhost is used to configure the loopback interface# when the system is booting. Do not change this entry.##127.0.0.1localhost<中略>127.0.0.1アプリ名
3.rails s
で、アプリ名:3000
でアクセス出来ればオッケー
まとめ
現在の会社の開発環境構築手順の中にhostsを書き換える部分があり、
そこではじめて、hostsのローカル・ループバック・アドレス(127.0.0.1部分)を編集することでlocalhost:3000
ではなく、アプリ名.dev:3000
やアプリ名.test:3000
でアクセス出来ることを知りました
専門学校だったり、参考書であまり触れない部分だと思うので、
知らない方向けに投稿させて頂いた次第です
注意
2017年末あたり、Chromeのバージョンアップの際に、開発環境のURLに.dev
を含む場合は、開発環境もhttps
に対応させないとアクセス出来なくなってしまいました
なので・・・アプリ名.dev
は使わない方が無難かもしれません
↓↓↓実際の画面
mswin.vim
概要
やっぱり、cntl+cとvは普通に使いたいんだが、なかなかmswin.vimにはくせがあるのでそんな話
設定
とりあえず、windowsで動かしてます。
_vimrcに
source $VIMRUNTIME/mswin.vim
っで、shiftで選択して、cntl+cでコピーして、cntl+vでペーストすることができます。
cntl+aで全部選択も、cntl+z,atl+f4で終了もついてきます。
ああ、便利
セレクトモード
shiftで選択するときは、いつもの「visualモード」でなく、「セレクトモード」になります。
「visualモード」のつもりで、:で選択範囲に対するコマンドを入れようとすると、選択したものが:になってしまって、意図と違います。
こんなときには、「cntl+g」とすると、選択されたままで、「visualモード」になってくれます。
ここで、:を押してokです。
未だに解明できないこと
nnoremap <C-Up> <C-w>-<CR>
が、mswin.vimを設定すると、変になります。
vimはおかしいのですが、gvimは大丈夫です。
ここさえ、クリアできれば、いいんですけどねえ・・
Vimのカラースキームをまーまーいい感じに変更するためのプラグイン -> twc.vim
開いているVim上のカラースキームをランダム、もしくは指定して変更するプラグインを書いてみました。
こんなやつです↓
自作プラグインを初自作
先日このようなポストをQiitaに書き、
Vimコマンドを自作してみる、という今年の目標を達成するためにVim scriptに触り始めてみたら、かなり楽しいー!(コマンドでの引数の受け取り方)
そして学んだことを実践するため、早速自作プラグインを作ってみた、という感じです。
プラグイン作成の上でのお作法など、「コイツ分かっていないな、、、」と目につく箇所がありましたら、ご指摘やプルリクいただけたら幸いです。
shinshin86/twc.vim: Today(This) Window Color at my Vim
セットアップ手順
READMEにも書きましたが、インストールしてからのセットアップ手順は下記の通りです。
touch $HOME/.twc_colors.vim"vim $HOME/.twc_colors.vim"
作成した$HOME/.twc_colors.vim"
に対して、自身で使用しているカラースキームを各行に記述すれば完了です。
例えばこんな感じで書いていきます。
iceberg
hybrid
default
blue
darkblue
desert
elflord
evening
morning
murphy
あとはVimを立ち上げて:Twc
、もしくは:Twc0
とか:Twc 2
とか指定したいカラースキームを選択すればOKです。
自身の学習目的の側面が強いため、特別便利なプラグインというわけではありませんが、Vimのウィンドウを複数立ち上げてコーティングする際など、窓ごとにカラースキームを変えて使いたかったりするときに、意外と便利で使っています。
Vimから統合開発環境をまとめてみる2018
@ysm001さん記載のvimをIDEにという流れを進化させて色々盛り込んでみました。
https://qiita.com/ysm001/items/8ae97cfdaae3f5fe79f4
githubにでも上げるのが良いと思うが、メンテすべきか悩んだのでそのままソースを掲載。
追加した代表的なモノ。
fugitive
VimからGit操作できる定番プラグイン
https://github.com/tpope/vim-fugitive
dbext
VimからDB操作できるプラグイン。
http://www.vim.org/scripts/script.php?script_id=356
"*****************************************************************************
"" NeoBundle core
"*****************************************************************************
if has('vim_starting')
set nocompatible " Be iMproved
" Required:
set runtimepath+=~/.vim/bundle/neobundle.vim/
endif
let neobundle_readme=expand('~/.vim/bundle/neobundle.vim/README.md')
let solarized_vim=expand('~/.vim/colors/solarized.vim')
let g:vim_bootstrap_langs = "javascript,ruby,python,html,go"
let g:vim_bootstrap_editor = "vim" " nvim or vim
if !filereadable(neobundle_readme)
echo "Installing NeoBundle..."
echo ""
silent !mkdir -p ~/.vim/bundle
silent !git clone https://github.com/Shougo/neobundle.vim ~/.vim/bundle/neobundle.vim/
let g:not_finsh_neobundle = "yes"
" Run shell script if exist on custom select language
endif
if !filereadable(solarized_vim)
echo "Installing Solarized Theme..."
echo ""
silent !mkdir -p ~/.vim/colors
silent !mkdir -p ~/.vim/tmp
silent !git clone https://github.com/altercation/vim-colors-solarized.git ~/.vim/tmp/solarized
!mv ~/.vim/tmp/solarized/colors/solarized.vim ~/.vim/colors/
endif
" Required:
call neobundle#begin(expand('~/.vim/bundle/'))
" Let NeoBundle manage NeoBundle
" Required:
NeoBundleFetch 'Shougo/neobundle.vim'
"*****************************************************************************
""" Functions
"*****************************************************************************
function! s:meet_neocomplete_requirements()
return has('lua') && (v:version > 703 || (v:version == 703 && has('patch885')))
endfunction
"*****************************************************************************
"" VimProc DLL Path
"*****************************************************************************
if has('mac')
let g:vimproc_dll_path = $VIMRUNTIME . '/autoload/vimproc_mac.so'
elseif has('win32')
let g:vimproc_dll_path = $HOME . '.vim/bundle/vimproc/autoload/vimproc_win32.dll'
elseif has('win64')
let g:vimproc_dll_path = $HOME . '.vim/bundle/vimproc/autoload/vimproc_win64.dll'
endif
"*****************************************************************************
"" NeoBundle install packages
"*****************************************************************************
NeoBundle 'altercation/vim-colors-solarized'
NeoBundle 'scrooloose/nerdtree'
NeoBundle 'vim-scripts/dbext.vim'
NeoBundle 'tpope/vim-fugitive'
"" vimproc
NeoBundle 'Shougo/vimproc.vim', {
\ 'build' : {
\ 'windows' : 'tools\\update-dll-mingw',
\ 'cygwin' : 'make -f make_cygwin.mak',
\ 'mac' : 'make -f make_mac.mak',
\ 'linux' : 'make -f make_mac.mak',
\ 'unix' : 'gmake -f make_mac.mak',
\ },
\ }
"" 補完
if s:meet_neocomplete_requirements()
NeoBundle 'Shougo/neocomplete'
"" NeoBundle 'supermomonga/neocomplete-rsense.vim', {'depends': ['Shougo/neocomplete.vim', 'marcus/rsense'],}
else
NeoBundle 'Shougo/neocomplcache'
"" NeoBundle 'Shougo/neocomplcache-rsense.vim', {'depends': ['Shougo/neocomplcache.vim', 'marcus/rsense'],}
endif
"" スニペット
NeoBundle 'Shougo/neosnippet'
NeoBundle 'Shougo/neosnippet-snippets'
NeoBundle 'honza/vim-snippets'
"" ctags
NeoBundle 'majutsushi/tagbar'
NeoBundle 'szw/vim-tags'
NeoBundle 'tpope/vim-endwise'
"" 構文チェック
NeoBundle 'scrooloose/syntastic'
NeoBundle 'pmsorhaindo/syntastic-local-eslint.vim'
"" markdownプレビュー
NeoBundle 'plasticboy/vim-markdown'
NeoBundle 'kannokanno/previm'
NeoBundle 'tyru/open-browser.vim'
"" python構文・コーディング規約チェック
NeoBundle 'Flake8-vim'
NeoBundle 'davidhalter/jedi-vim'
NeoBundle 'hynek/vim-python-pep8-indent'
"" indent可視化
NeoBundle 'Yggdroot/indentLine'
"" HTML/CSS
NeoBundle 'vim-scripts/HTML-AutoCloseTag'
NeoBundle 'hail2u/vim-css3-syntax'
NeoBundle 'gorodinskiy/vim-coloresque'
NeoBundle 'mattn/emmet-vim'
NeoBundle 'tpope/vim-surround'
NeoBundle 'othree/yajs.vim'
"" JSON syntax
NeoBundle 'elzr/vim-json'
NeoBundle 'leafgarland/typescript-vim'
NeoBundle 'jason0x43/vim-js-indent'
"" mustache / handlebars
NeoBundle 'mustache/vim-mustache-handlebars'
"" nodejs補完
NeoBundle 'myhere/vim-nodejs-complete'
"" VCL
NeoBundle 'smerrill/vcl-vim-plugin'
call neobundle#end()
" Required:
filetype plugin indent on
" If there are uninstalled bundles found on startup,
" this will conveniently prompt you to install them.
NeoBundleCheck
"*****************************************************************************
"" Basic Setup
"*****************************************************************************"
let mapleader="\<Space>"
"" Encoding
set encoding=utf-8
set fileencoding=utf-8
set fileencodings=utf-8
"" Fix backspace indent
set backspace=indent,eol,start
"" Searching
set hlsearch
set incsearch
set ignorecase
set smartcase
"" Encoding
set bomb
set binary
set ttyfast
"" Directories for swp files
set nobackup
set noswapfile
set fileformats=unix,dos,mac
set showcmd
set shell=/bin/sh
set whichwrap=h,l,b,s,<,>,[,]
"" JSONのダブルクォーテーションを表示する
let g:vim_json_syntax_conceal = 0
"" 改行時に自動でコメントを挿入するのを防ぐ
autocmd FileType * setlocal formatoptions-=ro
let g:vim_json_syntax_conceal=0
"*****************************************************************************
"" Visual Settings
"*****************************************************************************
syntax enable
set background=dark
set number
set ruler
"*****************************************************************************
"" Abbreviations
"*****************************************************************************
"" NERDTree
let g:NERDTreeChDirMode=2
let g:NERDTreeIgnore=['\.rbc$', '\~$', '\.pyc$', '\.db$', '\.sqlite$', '__pycache__', 'node_modules', 'bower_components']
let g:NERDTreeSortOrder=['^__\.py$', '\/$', '*', '\.swp$', '\.bak$', '\~$']
let g:NERDTreeShowBookmarks=1
let g:nerdtree_tabs_focus_on_files=1
let g:NERDTreeMapOpenInTabSilent = '<RightMouse>'
let g:NERDTreeWinSize = 20
set wildignore+=*/tmp/*,*.so,*.swp,*.zip,*.pyc,*.db,*.sqlite
nnoremap <silent> <leader>nf :NERDTreeFind<CR>
map <C-n> :NERDTreeToggle<CR>
"*****************************************************************************
""" Mappings
"*****************************************************************************
"" Copy/Paste/Cut
set clipboard=unnamed,unnamedplus
"******************
"" neosnippet
imap <c-k> <Plug>(neosnippet_expand_or_jump)
smap <c-k> <Plug>(neosnippet_expand_or_jump)
xmap <c-k> <Plug>(neosnippet_expand_target)
imap <expr><TAB> neosnippet#expandable_or_jumpable() ? "\<Plug>(neosnippet_expand_or_jump)": pumvisible() ? "\<C-n>" : "\<TAB>"
smap <expr><TAB> neosnippet#expandable_or_jumpable() ? "\<Plug>(neosnippet_expand_or_jump)": "\<TAB>"
if has('conceal')
set conceallevel=2 concealcursor=i
endif
"******************
"******************
if s:meet_neocomplete_requirements()
"" neocomplete
let g:neocomplete#enable_at_startup = 1
let g:neocomplete#enable_ignore_case = 1
let g:neocomplete#enable_smart_case = 1
if !exists('g:neocomplete#keyword_patterns')
let g:neocomplete#keyword_patterns = {}
endif
let g:neocomplete#keyword_patterns._ = '\h\w*'
else
"" neocomplcache
let g:neocomplcache_enable_at_startup = 1
let g:neocomplcache_enable_ignore_case = 1
let g:neocomplcache_enable_smart_case = 1
if !exists('g:neocomplcache_keyword_patterns')
let g:neocomplcache_keyword_patterns = {}
endif
let g:neocomplcache_keyword_patterns._ = '\h\w*'
let g:neocomplcache_enable_camel_case_completion = 1
let g:neocomplcache_enable_underbar_completion = 1
endif
" <TAB>: completion.
inoremap <expr><TAB> pumvisible() ? "\<C-n>" : "\<TAB>"
inoremap <expr><S-TAB> pumvisible() ? "\<C-p>" : "\<S-TAB>"
"******************
"******************
" tagbar
if ! empty(neobundle#get("tagbar"))
let g:tagbar_width = 20
nn <silent> <leader>t :TagbarToggle<CR>
endif
"******************
"******************
" ctags
let g:vim_tags_project_tags_command = "/usr/local/Cellar/ctags/5.8_1/bin/ctags -f .tags -R . 2>/dev/null"
let g:vim_tags_gems_tags_command = "/usr/local/Cellar/ctags/5.8_1/bin/ctags -R -f .Gemfile.lock.tags `bundle show --paths` 2>/dev/null"
let g:vim_tags_auto_generate = 1
set tags+=.tags
set tags+=.Gemfile.lock.tags
if has("path_extra")
set tags+=tags;
endif
nnoremap <C-]> g<C-]>
"******************
"******************
" syntastic
set statusline+=%#warningmsg#
set statusline+=%{SyntasticStatuslineFlag()}
set statusline+=%*
let g:syntastic_mode_map = { 'mode': 'active' }
let g:syntastic_ruby_checkers=['rubocop', 'mri']
let g:syntastic_python_checkers = ['pyflakes', 'pep8']
let g:syntastic_javascript_checkers=['eslint']
let g:syntastic_coffee_checkers = ['coffeelint']
let g:syntastic_scss_checkers = ['scss_lint']
let g:syntastic_enable_signs = 1
let g:syntastic_always_populate_loc_list = 0
let g:syntastic_auto_loc_list = 0
let g:syntastic_check_on_open = 0
let g:syntastic_check_on_wq = 0
"******************
"******************
" typescript
au BufRead,BufNewFile,BufReadPre *.ts set filetype=typescript
autocmd FileType typescript setlocal sw=2 sts=2 ts=2 et
"******************
"******************
let g:user_emmet_leader_key='<c-e>'
let g:user_emmet_settings = {
\ 'variables': {
\ 'lang': "ja"
\ },
\ 'indentation': ' '
\ }
"******************
"******************
" rsense
if !exists('g:neocomplete#force_omni_input_patterns')
let g:neocomplete#force_omni_input_patterns = {}
endif
let g:neocomplete#force_omni_input_patterns.ruby = '[^. *\t]\.\w*\|\h\w*::'
let g:neocomplete#sources#rsense#home_directory = '/usr/local/bin/rsense'
"******************
"******************
" PyFlake
let g:PyFlakeOnWrite = 1
let g:PyFlakeCheckers = 'pep8,mccabe,pyflakes'
let g:PyFlakeDefaultComplexity=10
"******************
"******************
" jedi
autocmd FileType python setlocal omnifunc=jedi#completions
let g:jedi#completions_enabled = 0
let g:jedi#auto_vim_configuration = 0
if !exists('g:neocomplete#force_omni_input_patterns')
let g:neocomplete#force_omni_input_patterns = {}
endif
let g:neocomplete#force_omni_input_patterns.python = '\h\w*\|[^. \t]\.\w*'
"******************
"******************
" typescript
autocmd BufRead,BufNewFile *.ts set filetype=typescript
let g:typescript_indent_disable = 1
"******************
"******************
" indentLine
let g:indentLine_fileTypeExclude = ['help', 'nerdtree', 'calendar', 'thumbnail']
"******************
"******************
" mustache / handlebars
let g:mustache_abbreviations = 1
"******************
"******************
" vim-nodejs-complete
:setl omnifunc=jscomplete#CompleteJS
if !exists('g:neocomplcache_omni_functions')
let g:neocomplcache_omni_functions = {}
endif
let g:neocomplcache_omni_functions.javascript = 'nodejscomplete#CompleteJS'
"******************
"*****************************************************************************
" Indent Width
"*****************************************************************************"
set shiftwidth=2
set tabstop=2
augroup indent
autocmd! FileType python setlocal shiftwidth=4 tabstop=4
augroup END
set autoindent
set expandtab
"*****************************************************************************
" Large File
"*****************************************************************************"
set synmaxcol=256
set nowrap
" file is large from 10mb
let g:LargeFile = 1024 * 100
augroup LargeFile
autocmd BufReadPre * let f=getfsize(expand("<afile>")) | if f > g:LargeFile || f == -2 | call LargeFile() | endif
augroup END
function LargeFile()
" no syntax highlighting etc
set eventignore+=FileType
" save memory when other file is viewed
setlocal bufhidden=unload
" display message
autocmd VimEnter * echo "The file is larger than " . (g:LargeFile / 1024 / 1024) . " MB, so some options are changed (see .vimrc for details)."
endfunction
"DBext settings
let dbext_default_profile=""
let dbext_default_type="MYSQL"
let dbext_default_user="dev"
let dbext_default_passwd=""
let dbext_default_dbname="mydb"
let dbext_default_host="localhost"
let dbext_default_buffer_lines=20
" <leader> key mapping
let mapleader = ','
Vim patchダイジェスト [2018/02] (仮)
Vim patchダイジェスト [2018/02] (仮)
(8.0.1452~ 8.0.1489)
- runtimeファイル更新:
- Chicken (Scheme)のftpluginおよびsyntaxファイルの追加。
- syntax/scheme.vimの大幅な更新。
- todoファイル更新。他。
- 8.0.1489:
getcwd(-1)
でglobalディレクトリを返すようにしました。 - 8.0.1488: Emacs形式のタグファイルが動作しなくなっていた件を修正しました。
- 8.0.1485: ヘンテコリンなautocmdがarglistを再帰的に変更する件を修正しました。
- 8.0.1483:
searchpair()
がタイムアウト時に無効な値を返すことがある件を修正しました。 - 8.0.1482:
feedkeys()
を使ってインサートモードの補完のtestがおこなえないのを修正しました。 - 8.0.1479: インサートモードの補完ステータスが(ソースコード的に)混乱しているのを修正しました。※実際の動作は変わっていないはず (関連patch: 8.0.1480, 8.0.1482)
- 8.0.1477: terminalウィンドウ外にマウスカーソルを移動した時にカーソルがチラつくのを修正しました。
- 8.0.1473: Windows: 32bitアプリケーションと64bitアプリケーション間のDrag&Dropが失敗する件を修正しました。(関連URI: vim-jp/issues/552)
- 8.0.1471: Windows:
CursorIM
のハイライトが機能していなかった件を修正しました。 - 8.0.1469: packageのパスがシンボリックリンクの時に
'runtimepath'
の最後に追加されてしまう件を修正しました。 - 8.0.1464:
:find
でディレクトリを補完した時はスラッシュ('/')を追加するようにしました。 - 8.0.1459:
DirChanged
イベントを追加しました。 - 8.0.1457:
runtime/scripts.vim
がshebangでpikeとclojureを認識するようになりました。 - 8.0.1455:
$SHELL
に空白が含まれていると'shell'
がおかしな値になる件を修正しました。 - 8.0.1454: サイレントモード(
:h -s-ex
)時に出力がバッファリングされる件を修正しました。
凡例
表記 | 意味 |
---|---|
![]() | 新機能、大幅な仕様変更 |
'hoge' | オプション (:h options 参照) |
:hoge | Exコマンド (:h :index 参照) |
hoge() | 組み込み関数 (:h functions 参照) |
v:hoge | Vim定義済変数 (:h v: 参照) |
+hoge | feature (:h +feature-list 参照) |
方針
こちらを参照。
【vim-go】関数呼び出し元を一覧表示
1.
呼び出し元を表示したい関数定義の上ににカーソルを置く
2.
:GoCallers
参考
vim-goドキュメント
https://github.com/fatih/vim-go/blob/master/doc/vim-go.txt#L547