v(テキスト選択)やCtrl-v(矩形選択)、V(行選択)の選択中にo
を押すとカーソル位置の始点/終点を選択しなおせます。
選択開始位置を間違えた場合などに、いちいち選択を解除せずに選択範囲を修正できてかなり便利です。
v(テキスト選択)やCtrl-v(矩形選択)、V(行選択)の選択中にo
を押すとカーソル位置の始点/終点を選択しなおせます。
選択開始位置を間違えた場合などに、いちいち選択を解除せずに選択範囲を修正できてかなり便利です。
v
(テキスト選択)やCtrl-v
(矩形選択)、V
(行選択)をして作業が終了したあとにもう一度同じ場所を選択したいときがたまにありますよね。
そんなときはノーマルモードにいるときにgv
です。
前回選択した箇所がそのまま選択されます。
vimで:
を入力するとコマンドラインモードが始まりますが、このときテキスト中の単語をコマンドラインに持ってくる方法です。
:
のあとの入力待ちになっているときに<Ctrl-r><Ctrl-w>
と入力してください。
カーソル下にある単語がコマンドラインに入力されます。
※参考:http://uguisu.skr.jp/Windows/vi.html
:Tutorial チュートリアル起動
h→左方向に移動
l→右方向に移動
j→下方向に移動
k→上方向に移動
[ESC] :q! (変更を破棄)
[ESC] :wq (変更を保存)
:help
:help cmd
CTRL-W CTRL-W
[ESC]
ノーマルモード [ESc] x
i
A
dw
d$
d2w
dd
2dd
2w
3e
0
u(小文字)
U(大文字)
CTRL-R
p
r (ただし、アルファベットのみ)
cw (変更だけでなく挿入も行える)
c$
CTRL-G
G
数値 G
gg
/
?
n
N
:noh
%
:s/old/new
:s/old/new/g
:#,#s/old/new/g
:%s/old/new/g
:%s/old/new/gc
:!ls
:!rm [ファイル名]
:w [ファイル名]
v
v → d
:r ファイル名
o(小文字だと、カーソルの下の行が挿入モード)
O(大文字だと、カーソルの上の行で挿入モード)
a
e
(”a”と”i”は同じ挿入モードだが、文字が挿入される位置が異なる)
y
p
R
:set xxx (xxxが設定される)
:set ic
:set is
:set hls
:set noic
CTRL-D
[TAB]
ファイル群の指定:args ./**/views/*.php
指定したファイル群の確認:args
変換:argdo %s/hoge/moge/g | update
ログを出さない:silent! %s/hoge/moge/g | update
v:一文字ずつ選択
V:一行ずつ選択
Ctrl+v: 矩形選択
本記事は Vim Advent Calendar 2013の 132 日目です。
131 日目は @keizo_bookman さんによる、とあるvim宣教師の手記でした。
vim-airline 等ステータスライン系プラグインでは、フォントにパッチを当てることでステータスラインのデザインを更に良くする方法があります。
しかし Windows の定番フォント Consolas ではうまくパッチが当たらなかったり、そもそもパッチを当てるための環境 (fontforge) を用意するのが不便という事情がある為、別のアプローチでこれを行うというのが本記事の趣旨です。
まずはステータスライン表示用の文字のみが含まれた、パッチ用のフォントを入手します。これは powerline のリポジトリで配布されています。
https://github.com/Lokaltog/powerline/blob/develop/font/PowerlineSymbols.otf?raw=true
これを windows 用の truetype フォントに変換します。変換は Web サービスで行うのが手軽でしょう。調べればそれっぽいサービスがいくつか引っかかります。
http://www.freefontconverter.com/
作成した ttf フォントファイルをインストールします。
作成したパッチ用のフォントを、対象のフォントに fontlink させます。
例えば Consolas で行う場合、レジストリのHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontLink\SystemLink
に複数行文字列として新たに Consolas
という値を追加し、以下の値を書き込みます。
PowerlineSymbols.ttf
他に日本語フォント等リンクさせている場合、一番上にパッチ用のフォントを追加します。
PowerlineSymbols.ttfMEIRYO.TTC,Meiryo,128,85
ちなみにフォントリンクはリンクさせるフォントのサイズを調整することができます。ここで 85 となっている 4 つめの値を、128 を基準に小さくすれば リンクフォントが大きく、128 より大きくすればリンクフォントが小さくなります。3 つめの値も scaling factor に関係すると説明されているところが多いですが、これはおそらく font charset に関係する値のようなので日本語をリンクさせる場合は 128 を指定しておきます。
Windows ではフォントのエイリアスがうまく表示されず、Inconsolata や Ricty などの他 OS での定番フォントが汚くなりがちですが、この方法だと Windows に最適化されている Consolas を用いる為レンダリングが綺麗です。
また、レジストリを操作する必要はありますが、引き換えにフォントにパッチを当てる必要がありません。
デメリットというより制限事項ですが、追加されたフォントのシンボルと隣の文字が続いて表示されているような箇所では、若干の隙間があるようです。カラースキームによってはこの隙間が見えやすかったり見えにくいことがあります。但しパッチを当てたフォントについてもシンボルとフォントのバランスが取れていなかったり、同様に隙間が見えることもあるようです。
少し前に、Vim を VS2013 でビルドする記事を書きました (宣伝)。
http://qiita.com/s_of_p/items/fe522eb6b1d48b8b3885
VAC の記事ではありませんが、よければチェックしてみてください。
以上 Vim Advent Calendar 2013 132 日目の記事でした、次回は現在未定です。
http://www.natzworks.com/digital/2010/454.html
http://msdn.microsoft.com/en-us/library/cc194829.aspx
※参考:http://uguisu.skr.jp/Windows/vi.html
ホームディレクトリ上に「.vimrc」ファイルを作成
if has("mouse") " Enable the use of the mouse in all modes
set mouse=a
endif
以上。
X なしで Eclim を使う方法。
Vagrant や Docker の流行により、気軽に仮想マシンを使う時代になっています。すると開発にも仮想マシンを使うようにしてホストマシンはできるだけ汚さない方向に持って行きたいことになる。手軽に使いたいため当然 X 環境などは構築しない。
ここで問題になるのは IDE を前提にした言語。 IDE はウィンドウシステムの中で動くため、仮想マシンを X なしで使うと IDE の機能を使えず開発が厳しくなってくる。
具体的に言うと Java 、ジャバ、ジャヴァである。
書くときはあまりにも長い名前をタイプしたくないため補完が欲しくなり、読むときは名前解決のためのタグジャンプが欲しくなる。
Eclimは Eclipse の機能を Vim を始めとする各種エディタで使うインターフェースを提供するソフトウェアです。ネットワーク越しに Eclipse の機能を叩いています。
ウィンドウシステムありの環境においては、 Eclipse と Vim のインターフェースを両方使いたいか否かによって、次の使い方があります。
ここでは X 環境を構築しないので、 1. の使い方をすることになります。
Ubuntu では
$ sudo apt-get install openjdk-6-jdk xvfb build-essential
$ wget <eclipse_mirror>/eclipse-<version>-linux-gtk.tar.gz
$ tar -zxf eclipse-<version>-linux-gtk.tar.gz
$ java -Dvim.files=$HOME/.vim \
-Declipse.home=$HOME/eclipse \
-jar eclim_2.3.2.jar install
こんな感じです。
Eclim 2.3.4 および 2.3.3 では動かなかったので 2.3.2 を使っています。
Xvfb で仮想 X サーバを立ち上げて、その上で Eclipse および Eclim を起動し Vim から利用します。
$ Xvfb :1 -screen 0 1024x768x24 &$ DISPLAY=:1 ./eclipse/eclimd start
すると Eclim デーモンが立ち上がるので、 Vim を立ち上げて
:PingEclim
でバージョンが返ってくることを確認。
:ProjectCreate /path/to/my_project -n java
でプロジェクト作成。
$ mkdir -p /path/to/my_project/src/a/b/c
$ vim /path/to/my_project/src/a/b/c/X.java
packagea.b.c;classX{publicstaticvoidmain(String[]args){}}
ここまで書いたところで、 main
の中に
System.
と入力して <C-x><C-u>
を入力しましょう。すると補完候補が表示されるはず。他にも、次のように
packagea.b.c;classX{privatestaticArrayList<Integer>lst=newArrayList<Integer>();publicstaticvoidmain(String[]args){System.out.println("Hello, Eclim!");}}
ArrayList
の import
宣言がありませんが、 ArrayList
の上にカーソルを持って行き :JavaImport
と叩くと import
を追加してくれます。また、この lst
について
lst.<C-x><C-u>
で ArrayList
のメソッドも補完してくれます。
packagea.b.c;classYimplementsRunnable{publicvoidrun(){System.out.println("Hello from Y");}}
packagea.b.c;classX{publicstaticvoidmain(String[]args){Yy=newY();y.run();}}
run
の上に行き :JavaSearchContext
でクラス Y
の run()
メソッドにジャンプできます。
http://eclim.org/vim/index.htmlによると
に対応しているらしい。僕も Scala で使いたいので試してみる。
http://eclim.org/cheatsheet.htmlを一通り見ておくと良いと思います。
カーソルが乗っている単語を丸括弧で囲む場合は ysiw(
とコマンドを入力すると、スペース付きの丸括弧で囲まれます。
hoge
( hoge )
個人的には自動挿入されるスペースがとても気になります。スペースを含めない場合は ysiw)
と入力することでスペース無しの丸括弧で囲むことができます。
hoge
(hoge)
下記を参考にしました。ありがとうございます。
http://stackoverflow.com/questions/9164405/vim-surround-inserts-extra-space-around-the-word
こんな感じで差分が表示されます。
左右に並ぶので比較しやすいです。
編集もできるので「あ、変なログが残っちゃってたわ」みたいなときササッと直せます。
.gitconfigに以下の設定を追加します。
[diff]external=git_diff_wrapper[pager]diff=
以下の様なgit_diff_wrapperというファイルを作成し、PATHの通っている場所に置きます。
私の場合/usr/local/bin
に置きました。
#!/bin/sh
vimdiff "$2""$5"
あとはいつも通りgit diffをすればOK!
※git_diff_wrapperに実行権限エラーがでたらchmood a+x git_diff_wrapper
とかで実行権限を追加。
Vim のノーマルモードであぁぁー!ってなってイライラすることありますよね。
ググっても、なかなか理想的なソリューションが見つからず諦めていましたが、
英数入力に切り替えるのは AppleScript 使えばいい感じにできんじゃね?と思いついてしまいました。
次に2つの場合に自動的に切り替えられます。
if executable('osascript')lets:keycode_jis_eisuu =102letg:force_alphanumeric_input_command ="osascript -e 'tell application \"System Events\" to key code " . s:keycode_jis_eisuu . "' &"inoremap<silent><Esc><Esc>:call system(g:force_alphanumeric_input_command)<CR>
autocmd!FocusGained *
\ call system(g:force_alphanumeric_input_command)endif
実は、入力ソースを切り替える方法でかなり試行錯誤しました。
例えば、ここにある方法では、
ATOK や Google 日本語入力を入れている場合では入力ソースの名前が異なるため厄介なのと、
GUI 操作をするので、Accessibility で許可しなければならない上処理が遅い問題がありました。
そこで、「英数に切り替えるためのキーコード」をシステムに送信するという全く異なるアプローチを取ることにしました。
ちなみに、私の vimrc は Github で公開されていますのでよかったらご参考に。
CSVやらTSVやらの整形に特化したプラグイン。
a,bb,ccc,dddd,
eeee,ffffff,ggggg,
hh,iii,jjjj,kk
こんな文書も :Align ,
とすると
a , bb , ccc , dddd ,
eeee , ffffff , ggggg ,
hh , iii , jjjj , kk
こうなります。
こちらのgithubを NeoBundle.vim
でインストールするとすぐに使えて簡単です。
私はもっぱら Cucumber の テーブル整形とかに重宝しそうだなぁと思って入れました。
(まだ使ってませんが、きっといい感じだと思ってます)
ここ二年くらいVimを使っていますが、基本動作もよくわからない状態が続いているので、ここらでちょっと基礎からやったほうがいいのかな?と思ってました。
んで、ふと、一日一個なにか新しいVimの知識を取り入れて、一年間続けたら、結構な知識量になってるんじゃないかなぁと。ただ続けるのもアレなので、記事でも書いてできるだけ三日坊主で終わらせないようにしたいなぁと思ってます。
基本中の基本ですが、ノーマルモード中にv
を押すとビジュアルモードになります。
ある文字を選択してコピー&ペースト。文章編集のよくある動作だと思います。
最近知ったのですが、vの後に続けるコマンドによって、色々できるみたいです。
例えばv
の後にiw
と打てば、現在カーソルが当たっている単語を選択することができるようです。
他にもvi"
と打てば、ダブルクオテーションでくくられている文字の中を選択することができるよう。
ほかにもi
の代わりにa
を使って、va"
とするとダブルクオテーションを含めた文字の選択ができるようです。
v
の代わりにd
を使うと、選択ではなく、削除ができるようです。
最近でびっくりしたのは、vit
と打つと、XMLやHTMLのインナーテキストを選択してくれることです。プラグインではなく、デフォルトで入っているのは意外でした。
この辺り、まとまったサイトを昔に見つけたのですが、どこだったのか忘れてしまいました。残念。。。
Wireshark で HEX String を見ると小文字だったりします。
私は HEX は大文字で書きたい派なので、大文字変換はよくします。
v
で ヴィジュアルモードに移行して任意の範囲を選択します。
その後、U
すると選択範囲が大文字になります。
小文字はU
の替わりにu
を使います。さっき知りました。u
はアンドゥのイメージが強く、ヴィジュアルモードとノーマルモードがごっちゃになってました。
ノーマルモードのu
はアンドゥ
ヴィジュアルモードのu
は小文字変換
覚えときましょう。(言い聞かせ)
ちなみにリドゥはノーマルモードで<C-r>
ですね。
ノーマルモードのU
は「行に対して行った変更の全てを取り消す」らしいです。
参考サイト:
http://advweb.seesaa.net/article/286507.html
http://archiva.jp/web/tool/vim_basic.html
"---------------------------------------------------------------------------
" Copyright (C) 2011 KaoriYa/MURAOKA Taro
"#####表示設定#####
set title "編集中のファイル名を表示
syntax on "コードの色分け
set tabstop=4 "インデントをスペース4つ分に設定
set smartindent "オートインデント
"#####検索設定#####
set ignorecase "大文字/小文字の区別なく検索する
set smartcase "検索文字列に大文字が含まれている場合は区別して検索する
set wrapscan "検索時に最後まで行ったら最初に戻る
"--------------------
"" 基本的な設定
"--------------------
"新しい行のインデントを現在行と同じにする
set autoindent
"バックアップファイルのディレクトリを指定する
set backupdir=$HOME/vimbackup
"
""クリップボードをWindowsと連携する
set clipboard=unnamed
"vi互換をオフする
""スワップファイル用のディレクトリを指定する
set directory=$HOME/vimbackup
"タブの代わりに空白文字を指定する
set expandtab
"
""変更中のファイルでも、保存しないで他のファイルを表示する
set hidden
"インクリメンタルサーチを行う
set incsearch
"
""行番号を表示する
set number
"閉括弧が入力された時、対応する括弧を強調する
set showmatch
"
""新しい行を作った時に高度な自動インデントを行う
set smarttab
" grep検索を設定する
set grepformat=%f:%l:%m,%f:%l%m,%f\ \ %l%m,%f
set grepprg=grep\ -nh
"
" " 検索結果のハイライトをEsc連打でクリアする
nnoremap <ESC><ESC> :nohlsearch<CR>
" mapping関連カスタマイズ
map ¥ <leader>
noremap ; :
noremap : ;
if has('vim_starting')
set runtimepath+=~/.vim/bundle/neobundle.vim/
endif
call neobundle#rc(expand('~/.vim/bundle/'))
" let NeoBundle manage NeoBundle
NeoBundle 'Shougo/neobundle.vim'
"
" add plugins
"
filetype plugin on
"
NeoBundleCheck
NeoBundle 'davidhalter/jedi-vim'
NeoBundle 'Shougo/neocomplete.vim'
NeoBundle 'haya14busa/vim-easymotion'
NeoBundle 'thinca/vim-quickrun'
NeoBundle 'Shougo/neocomplcache'
NeoBundle 'nathanaelkane/vim-indent-guides'
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*'
" ホームポジションに近いキーを使う
let g:EasyMotion_keys='hjklasdfgyuiopqwertnmzxcvbHJKLASDFGYUIOPQWERTNMZXCVB'
" 「'」 + 何かにマッピング
let g:EasyMotion_leader_key="'"
" " 1 ストローク選択を優先する
let g:EasyMotion_grouping=1
" " カラー設定変更
hi EasyMotionTarget ctermbg=none ctermfg=red
hi EasyMotionShade ctermbg=none ctermfg=blue
autocmd FileType python let b:did_ftplugin = 1
let g:lightline = {
\ 'colorscheme': 'powerline',
\ 'mode_map': {'c': 'NORMAL'},
\ 'active': {
\ 'left': [ ['mode', 'paste'], ['fugitive', 'filename', 'cakephp', 'currenttag', 'anzu'] ]
\ },
\ 'component': {
\ 'lineinfo': ' %3l:%-2v',
\ },
\ 'component_function': {
\ 'modified': 'MyModified',
\ 'readonly': 'MyReadonly',
\ 'fugitive': 'MyFugitive',
\ 'filename': 'MyFilename',
\ 'fileformat': 'MyFileformat',
\ 'filetype': 'MyFiletype',
\ 'fileencoding': 'MyFileencoding',
\ 'mode': 'MyMode',
\ 'anzu': 'anzu#search_status',
\ 'currenttag': 'MyCurrentTag',
\ 'cakephp': 'MyCakephp',
\ }
\ }
function! MyModified()
return &ft =~ 'help\|vimfiler\|gundo' ? '' : &modified ? '+' : &modifiable ? '' : '-'
endfunction
function! MyReadonly()
return &ft !~? 'help\|vimfiler\|gundo' && &readonly ? ' ' : ''
endfunction
function! MyFilename()
return ('' != MyReadonly() ? MyReadonly() . ' ' : '') .
\ (&ft == 'vimfiler' ? vimfiler#get_status_string() :
\ &ft == 'unite' ? unite#get_status_string() :
\ &ft == 'vimshell' ? vimshell#get_status_string() :
\ '' != expand('%:t') ? expand('%:t') : '[No Name]') .
\ ('' != MyModified() ? ' ' . MyModified() : '')
endfunction
function! MyFugitive()
try
if &ft !~? 'vimfiler\|gundo' && exists('*fugitive#head') && strlen(fugitive#head())
return ' ' . fugitive#head()
endif
catch
endtry
return ''
endfunction
function! MyFileformat()
return winwidth(0) > 70 ? &fileformat : ''
endfunction
function! MyFiletype()
return winwidth(0) > 70 ? (strlen(&filetype) ? &filetype : 'no ft') : ''
endfunction
function! MyFileencoding()
return winwidth(0) > 70 ? (strlen(&fenc) ? &fenc : &enc) : ''
endfunction
function! MyMode()
return winwidth(0) > 60 ? lightline#mode() : ''
endfunction
function! MyCurrentTag()
return tagbar#currenttag('%s', '')
endfunction
function! MyCakephp()
return exists('*cake#buffer') ? cake#buffer('type') : ''
endfunction
NeoBundle 'Shougo/unite.vim'
NeoBundle 'Shougo/vimproc'
NeoBundle 'majutsushi/tagbar'
NeoBundle 'itchyny/lightline.vim'
let g:lightline = {
\ 'colorscheme': 'wombat'
\ }
set list
set listchars=tab:»-,trail:-,eol:↲,extends:»,precedes:«,nbsp:%
" 全角スペース・行末のスペース・タブの可視化
if has("syntax")
syntax on
" PODバグ対策
syn sync fromstart
function! ActivateInvisibleIndicator()
" 下の行の" "は全角スペース
syntax match InvisibleJISX0208Space " " display containedin=ALL
highlight InvisibleJISX0208Space term=underline ctermbg=Blue guibg=darkgray gui=underline
"syntax match InvisibleTrailedSpace "[ \t]\+$" display containedin=ALL
"highlight InvisibleTrailedSpace term=underline ctermbg=Red guibg=NONE gui=undercurl guisp=darkorange
"syntax match InvisibleTab "\t" display containedin=ALL
"highlight InvisibleTab term=underline ctermbg=white gui=undercurl guisp=darkslategray
endfunction
augroup invisible
autocmd! invisible
autocmd BufNew,BufRead * call ActivateInvisibleIndicator()
augroup END
endif
" 文字コードの自動認識
if &encoding !=# 'utf-8'
set encoding=japan
set fileencoding=japan
endif
if has('iconv')
let s:enc_euc = 'euc-jp'
let s:enc_jis = 'iso-2022-jp'
" iconvがeucJP-msに対応しているかをチェック
if iconv("\x87\x64\x87\x6a", 'cp932', 'eucjp-ms') ==# "\xad\xc5\xad\xcb"
let s:enc_euc = 'eucjp-ms'
let s:enc_jis = 'iso-2022-jp-3'
" iconvがJISX0213に対応しているかをチェック
elseif iconv("\x87\x64\x87\x6a", 'cp932', 'euc-jisx0213') ==# "\xad\xc5\xad\xcb"
let s:enc_euc = 'euc-jisx0213'
let s:enc_jis = 'iso-2022-jp-3'
endif
" fileencodingsを構築
if &encoding ==# 'utf-8'
let s:fileencodings_default = &fileencodings
let &fileencodings = s:enc_jis .','. s:enc_euc .',cp932'
let &fileencodings = &fileencodings .','. s:fileencodings_default
unlet s:fileencodings_default
else
let &fileencodings = &fileencodings .','. s:enc_jis
set fileencodings+=utf-8,ucs-2le,ucs-2
if &encoding =~# '^\(euc-jp\|euc-jisx0213\|eucjp-ms\)$'
set fileencodings+=cp932
set fileencodings-=euc-jp
set fileencodings-=euc-jisx0213
set fileencodings-=eucjp-ms
let &encoding = s:enc_euc
let &fileencoding = s:enc_euc
else
let &fileencodings = &fileencodings .','. s:enc_euc
endif
endif
" 定数を処分
unlet s:enc_euc
unlet s:enc_jis
endif
" 改行コードの自動認識
set fileformats=unix,dos,mac
" □とか○の文字があってもカーソル位置がずれないようにする
if exists('&ambiwidth')
set ambiwidth=double
endif
"---------------------------------------------------------------------------
" Copyright (C) 2011 KaoriYa/MURAOKA Taro
"#####表示設定#####
set title "編集中のファイル名を表示
syntax on "コードの色分け
set tabstop=4 "インデントをスペース4つ分に設定
set smartindent "オートインデント
"#####検索設定#####
set ignorecase "大文字/小文字の区別なく検索する
set smartcase "検索文字列に大文字が含まれている場合は区別して検索する
set wrapscan "検索時に最後まで行ったら最初に戻る
"--------------------
"" 基本的な設定
"--------------------
"新しい行のインデントを現在行と同じにする
set autoindent
"バックアップファイルのディレクトリを指定する
set backupdir=$HOME/vimbackup
"
""クリップボードをWindowsと連携する
set clipboard=unnamed
"vi互換をオフする
""スワップファイル用のディレクトリを指定する
set directory=$HOME/vimbackup
"タブの代わりに空白文字を指定する
set expandtab
"
""変更中のファイルでも、保存しないで他のファイルを表示する
set hidden
"インクリメンタルサーチを行う
set incsearch
"
""行番号を表示する
set number
"閉括弧が入力された時、対応する括弧を強調する
set showmatch
"
""新しい行を作った時に高度な自動インデントを行う
set smarttab
" grep検索を設定する
set grepformat=%f:%l:%m,%f:%l%m,%f\ \ %l%m,%f
set grepprg=grep\ -nh
"
" " 検索結果のハイライトをEsc連打でクリアする
nnoremap <ESC><ESC> :nohlsearch<CR>
" mapping関連カスタマイズ
map ¥ <leader>
noremap ; :
noremap : ;
if has('vim_starting')
set runtimepath+=~/.vim/bundle/neobundle.vim/
endif
call neobundle#rc(expand('~/.vim/bundle/'))
" let NeoBundle manage NeoBundle
NeoBundle 'Shougo/neobundle.vim'
"
" add plugins
"
filetype plugin on
"
NeoBundleCheck
NeoBundle 'davidhalter/jedi-vim'
NeoBundle 'Shougo/neocomplete.vim'
NeoBundle 'haya14busa/vim-easymotion'
NeoBundle 'thinca/vim-quickrun'
NeoBundle 'Shougo/neocomplcache'
NeoBundle 'nathanaelkane/vim-indent-guides'
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*'
" ホームポジションに近いキーを使う
let g:EasyMotion_keys='hjklasdfgyuiopqwertnmzxcvbHJKLASDFGYUIOPQWERTNMZXCVB'
" 「'」 + 何かにマッピング
let g:EasyMotion_leader_key="'"
" " 1 ストローク選択を優先する
let g:EasyMotion_grouping=1
" " カラー設定変更
hi EasyMotionTarget ctermbg=none ctermfg=red
hi EasyMotionShade ctermbg=none ctermfg=blue
autocmd FileType python let b:did_ftplugin = 1
let g:lightline = {
\ 'colorscheme': 'powerline',
\ 'mode_map': {'c': 'NORMAL'},
\ 'active': {
\ 'left': [ ['mode', 'paste'], ['fugitive', 'filename', 'cakephp', 'currenttag', 'anzu'] ]
\ },
\ 'component': {
\ 'lineinfo': ' %3l:%-2v',
\ },
\ 'component_function': {
\ 'modified': 'MyModified',
\ 'readonly': 'MyReadonly',
\ 'fugitive': 'MyFugitive',
\ 'filename': 'MyFilename',
\ 'fileformat': 'MyFileformat',
\ 'filetype': 'MyFiletype',
\ 'fileencoding': 'MyFileencoding',
\ 'mode': 'MyMode',
\ 'anzu': 'anzu#search_status',
\ 'currenttag': 'MyCurrentTag',
\ 'cakephp': 'MyCakephp',
\ }
\ }
function! MyModified()
return &ft =~ 'help\|vimfiler\|gundo' ? '' : &modified ? '+' : &modifiable ? '' : '-'
endfunction
function! MyReadonly()
return &ft !~? 'help\|vimfiler\|gundo' && &readonly ? ' ' : ''
endfunction
function! MyFilename()
return ('' != MyReadonly() ? MyReadonly() . ' ' : '') .
\ (&ft == 'vimfiler' ? vimfiler#get_status_string() :
\ &ft == 'unite' ? unite#get_status_string() :
\ &ft == 'vimshell' ? vimshell#get_status_string() :
\ '' != expand('%:t') ? expand('%:t') : '[No Name]') .
\ ('' != MyModified() ? ' ' . MyModified() : '')
endfunction
function! MyFugitive()
try
if &ft !~? 'vimfiler\|gundo' && exists('*fugitive#head') && strlen(fugitive#head())
return ' ' . fugitive#head()
endif
catch
endtry
return ''
endfunction
function! MyFileformat()
return winwidth(0) > 70 ? &fileformat : ''
endfunction
function! MyFiletype()
return winwidth(0) > 70 ? (strlen(&filetype) ? &filetype : 'no ft') : ''
endfunction
function! MyFileencoding()
return winwidth(0) > 70 ? (strlen(&fenc) ? &fenc : &enc) : ''
endfunction
function! MyMode()
return winwidth(0) > 60 ? lightline#mode() : ''
endfunction
function! MyCurrentTag()
return tagbar#currenttag('%s', '')
endfunction
function! MyCakephp()
return exists('*cake#buffer') ? cake#buffer('type') : ''
endfunction
NeoBundle 'Shougo/unite.vim'
NeoBundle 'Shougo/vimproc'
NeoBundle 'majutsushi/tagbar'
NeoBundle 'itchyny/lightline.vim'
let g:lightline = {
\ 'colorscheme': 'wombat'
\ }
set list
set listchars=tab:»-,trail:-,eol:↲,extends:»,precedes:«,nbsp:%
" 全角スペース・行末のスペース・タブの可視化
if has("syntax")
syntax on
" PODバグ対策
syn sync fromstart
function! ActivateInvisibleIndicator()
" 下の行の" "は全角スペース
syntax match InvisibleJISX0208Space " " display containedin=ALL
highlight InvisibleJISX0208Space term=underline ctermbg=Blue guibg=darkgray gui=underline
"syntax match InvisibleTrailedSpace "[ \t]\+$" display containedin=ALL
"highlight InvisibleTrailedSpace term=underline ctermbg=Red guibg=NONE gui=undercurl guisp=darkorange
"syntax match InvisibleTab "\t" display containedin=ALL
"highlight InvisibleTab term=underline ctermbg=white gui=undercurl guisp=darkslategray
endfunction
augroup invisible
autocmd! invisible
autocmd BufNew,BufRead * call ActivateInvisibleIndicator()
augroup END
endif
" 文字コードの自動認識
if &encoding !=# 'utf-8'
set encoding=japan
set fileencoding=japan
endif
if has('iconv')
let s:enc_euc = 'euc-jp'
let s:enc_jis = 'iso-2022-jp'
" iconvがeucJP-msに対応しているかをチェック
if iconv("\x87\x64\x87\x6a", 'cp932', 'eucjp-ms') ==# "\xad\xc5\xad\xcb"
let s:enc_euc = 'eucjp-ms'
let s:enc_jis = 'iso-2022-jp-3'
" iconvがJISX0213に対応しているかをチェック
elseif iconv("\x87\x64\x87\x6a", 'cp932', 'euc-jisx0213') ==# "\xad\xc5\xad\xcb"
let s:enc_euc = 'euc-jisx0213'
let s:enc_jis = 'iso-2022-jp-3'
endif
" fileencodingsを構築
if &encoding ==# 'utf-8'
let s:fileencodings_default = &fileencodings
let &fileencodings = s:enc_jis .','. s:enc_euc .',cp932'
let &fileencodings = &fileencodings .','. s:fileencodings_default
unlet s:fileencodings_default
else
let &fileencodings = &fileencodings .','. s:enc_jis
set fileencodings+=utf-8,ucs-2le,ucs-2
if &encoding =~# '^\(euc-jp\|euc-jisx0213\|eucjp-ms\)$'
set fileencodings+=cp932
set fileencodings-=euc-jp
set fileencodings-=euc-jisx0213
set fileencodings-=eucjp-ms
let &encoding = s:enc_euc
let &fileencoding = s:enc_euc
else
let &fileencodings = &fileencodings .','. s:enc_euc
endif
endif
" 定数を処分
unlet s:enc_euc
unlet s:enc_jis
endif
" 改行コードの自動認識
set fileformats=unix,dos,mac
" □とか○の文字があってもカーソル位置がずれないようにする
if exists('&ambiwidth')
set ambiwidth=double
endif