vimでコーディングしている時、webページからコピペすると
インデントがずれることありますよね?
そんな時毎回"="でインデント直すのはめんどうだなって思って、
ggったらあったvim
:set paste
たったこれだけでいいらしい!
めっちゃ便利!
早速.vimrcに書いとかなきゃ!
vimでコーディングしている時、webページからコピペすると
インデントがずれることありますよね?
そんな時毎回"="でインデント直すのはめんどうだなって思って、
ggったらあったvim
:set paste
たったこれだけでいいらしい!
めっちゃ便利!
早速.vimrcに書いとかなきゃ!
ctrlp.vimで特定のファイルを無視する設定
letg:ctrlp_custom_ignore ='\v\.(o|d|out|log|bin|gcno|gcda)$'
CLI から起動する vi は素のまま使いたいって場合に。
-u NONE --noplugin とオプションつけて起動するとなにも読み込まれない。
これを zshrc とか bashrc にエイリアス登録しておけば、使い分けが簡単。
# vi は素のまま使うaliasvi="vi -u NONE --noplugin"# vim は MacVim として起動するif[-f/Applications/MacVim.app/Contents/MacOS/Vim];thenaliasvim='envLANG=ja_JP.UTF-8/Applications/MacVim.app/Contents/MacOS/Vim"$@"'fi
read this.
$ mkdir-p~/.vim/bundle
$ git clone https://github.com/Shougo/neobundle.vim~/.vim/bundle/neobundle.vim
write configuration at ~/.vimrc for NeoBundle
"---------------------------" Neobundle Settings"---------------------------" set directory path to manage bundlesetruntimepath+=~/.vim/bundle/neobundle.vim/" Required:call neobundle#begin(expand('~/.vim/bundle/'))" manage neobundle by neobundle
NeoBundleFetch 'Shougo/neobundle.vim'" HERE!! WRITE PLUGINGS!!call neobundle#end()" Required:filetype plugin indent on" uninstallede plungins checker
NeoBundleCheck
"-------------------------" End: Neobundle Settings."-------------------------
$ source ~/.vimrc
" HERE!! WRITE PLUGINGS!!" NERDTree
NeoBundle 'scrooloose/nerdtree
call neobundle#end()
$ vim
type y, start installing
NeoBundle 'Townk/vim-autoclose'
NeoBundle 'mattn/emmet-vim'
NeoBundle 'thinca/vim-quickrun'
NeoBundle 'grep.vim'
NeoBundle 'scrooloose/syntastic'
$ vim
letg:syntastic_javascript_checker ="jshint"letg:syntastic_check_on_open =0"never check at opening fileletg:syntastic_check_on_save =1"check at saving file
$ source ~/.vimrc
メモとして。
setlist"setsetnolist"unset
Ruby2.1.2で開発しているプロジェクトでSyntastic + Rubocopが上手く動かなかったので対処した。
Syntasticが構文解析に使っているgemのgithub.com/whitequark/parserはRubyのバージョンをチェックしていて、パッチレベルでの最新版以外では警告を出す。
$ rubocop -v
warning: parser/current is loading parser/ruby21, which recognizes
warning: 2.1.5-compliant syntax, but you are running 2.1.2.
0.29.1
警告が出るとSyntasticはRubocopをチェッカーから外してしまう。
ちなみに認識されているチェッカーは :SyntasticInfo
を実行すると確認できる。
対処法1
Rubyのバージョンを上げる。
parserのv2.2.0.3
ではRuby 2.1.xの場合2.1.5
だけが警告を出さない。
ref: https://github.com/whitequark/parser/blob/72401442432cb7ae1909b1f980b1dab3c4cad422/lib/parser/current.rb#L31
対処法2
parserとRubocopのバージョンを下げる。
Ruby: 2.1.2
parser: 2.2.0.pre.5
Rubocop: 0.26.1
下記のconfigファイルを~/.vimrc
として保存する
http://amix.dk/vim/vimrc.html
https://github.com/tpope/vim-pathogen
$ mkdir -p ~/.vim/autoload ~/.vim/bundle &&\
curl -LSso ~/.vim/autoload/pathogen.vim https://tpo.pe/pathogen.vim
~/.vimrc
に下記の一行を追加するexecute pathogen#infect()
https://github.com/scrooloose/nerdtree
cd ~/.vim/bundle
git clone https://github.com/scrooloose/nerdtree.git
https://github.com/fholgado/minibufexpl.vim.git
cd ~/.vim/bundle
git clone https://github.com/fholgado/minibufexpl.vim.git
https://github.com/kien/ctrlp.vim
cd ~/.vim/bundle
git clone https://github.com/kien/ctrlp.vim
SDカードっていきなり読めなくなるから怖い。
# python
sudo apt-get -y install git libreadline-dev libbz2-dev libsqlite3-dev libssl-dev
git clone https://github.com/yyuu/pyenv.git ~/.pyenv
git clone https://github.com/yyuu/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv
git clone https://github.com/s1341/pyenv-alias.git ~/.pyenv/plugins/pyenv-alias
echo'export PYENV_ROOT="${HOME}/.pyenv"'>> ~/.bashrc
echo'if [ -d "${PYENV_ROOT}" ]; then'>> ~/.bashrc
echo' export PATH=${PYENV_ROOT}/bin:$PATH'>> ~/.bashrc
echo' eval "$(pyenv init -)"'>> ~/.bashrc
echo'fi'>> ~/.bashrc
exec$SHELL -l
export PY2V=2.7.9
export PY3V=3.4.3
pyenv install ${PY2V}
pyenv rehash
VERSION_ALIAS="${PY2V}.so"PYTHON_CONFIGURE_OPTS="--enable-shared" pyenv install ${PY2V}
pyenv rehash
pyenv install ${PY3V}
pyenv rehash
VERSION_ALIAS="${PY3V}.so"PYTHON_CONFIGURE_OPTS="--enable-shared" pyenv install ${PY3V}
pyenv rehash
# luajit
curl -O http://luajit.org/download/LuaJIT-2.0.3.tar.gz
tar zxf ./LuaJIT-2.0.3.tar.gz
pushd ./LuaJIT-2.0.3
make
sudo make install
popd# vim
sudo apt-get -y build-dep vim
pyenv global ${PY2V}.so ${PY3V}.so
pyenv rehash
hg clone https://vim.googlecode.com/hg/ vim
pushd ./vim
hg update v7-4-664
find ./ -name config.cache -delete
LDFLAGS="-Wl,-rpath=${HOME}/.pyenv/versions/${PY2V}.so/lib:${HOME}/.pyenv/versions/${PY3V}.so/lib:/usr/local/lib"\
./configure \
--enable-fail-if-missing \
--with-features=huge \
--disable-darwin \
--disable-selinux \
--enable-multibyte \
--enable-fontset \
--enable-perlinterp \
--enable-pythoninterp=dynamic \
--enable-python3interp=dynamic \
--enable-tclinterp \
--enable-rubyinterp \
--enable-luainterp=yes \
--with-lua-prefix=/usr/local \
--with-luajit
make
sudo make install
popd
pyenv global ${PY2V}${PY3V}
pyenv rehash
unset PY2V
unset PY3V
# git
sudo apt-get install libcurl4-openssl-dev
git clone https://github.com/git/git.git
pushd ./git
git checkout refs/tags/v2.3.3
make
make install
popd
ほとんどはその辺に転がっているスクリプトなので補足しない。pyenv-alias
はpyenv
でのインストール時に別名を与えるマイナーなプラグイン。
普通にpyenv
でpythonをインストールすると、同じバージョンでstaticとsharedを共存させられないが、pyenv-alias
を使うと可能になる。
sharedはvim用。
この記事も初心者スクリプタが魔法使いを目指すためにHow to become a Hackerに書かれている項目を忠実に実行していくための日記です。
テキストエディタはvimが好きです。
vimはそのままでもよく練られたキーボード操作が可能になっていますがプラグインを入れるともっと化けると感じています。
なので早速インストールします!sudo yum install -y git vim
gitはプラグインを入れるときに使う便利パッケージを入れるのに使います。
インストールは完了です!
それでは早速vimのプラグインを入れていきましょう!
プラグインを入れるためにまずはプラグインを入れておくディレクトリを作成する必要があるとかないとか
mkdir -p ~.vim/bundle
さっそくこれで作成します。
で、次にgitからgit clone https://github.com/Shougo/neobundle.vim ~/.vim/bundle/neobundle.vim
でプラグイン管理するためのパッケージをインストールしていきます。
あとはカレントディレクトリに".vimrc"ファイルを作成すればOK!
フォーマットをかけたい範囲を選択して=
を押下。
ファイル全体に適用したいならggVG=
でOK
メソッド名等から定義先へジャンプしたい場合はvimだけだとgrep使うしかないのでctgasとかgtagsを使う。
brew install ctags
ctags -R
これだけでタグジャンプが使える。
ctags -R --regex-php="/^[ \t]*const[ \t]+([a-z0-9_]+)/\1/d/i"
phpの場合は上記のようにするとconstとかもジャンプできる。
ctrl + }
でジャンプ。ctrl + o
で戻れるgrepでもできるんだけど今回はGNU GLOBAL(gtags)を使ったやり方を書きます。
* 対象の言語が対応しているかチェックしてください。
http://www.gnu.org/software/global/global.html
http://uguisu.skr.jp/Windows/gtags.html
何ができるかは上記のサイト読んでください。
いつの間にか色んな言語が追加できるようになってるみたいですね。
この記事書いてから気づいた。。。
gtagsについては後で全部書き換えるかも知れないので以下のサイトを先に読んでください。
参考:http://qiita.com/sona-tar/items/672df1259a76f082ce42
↑後でやってみます。
brew search であったから多分できる。試してはない。
brew search global
gtags -v
NeoBundle 'vim-scripts/gtags.vim'
使い方は以下のサイトが良い感じだった
http://blog.matsumoto-r.jp/?p=2369
使い方というか私のvimrcの設定を貼ります。
" gtags
" 検索結果Windowを閉じる
nnoremap <C-q> <C-w><C-w><C-w>q
" Grep 準備
nnoremap <C-g> :Gtags -g
" このファイルの関数一覧
nnoremap <C-l> :Gtags -f %<CR><CR>
" カーソル以下の定義元を探す
"nnoremap <C-j> :Gtags <C-r><C-w><CR><CR>
map <C-j> :GtagsCursor<CR><CR>
" カーソル以下の使用箇所を探す
nnoremap <C-k> :Gtags -r <C-r><C-w><CR><CR>
" 次の検索結果
nnoremap <C-n> :cn<CR>
" 前の検索結果
nnoremap <C-p> :cp<CR>
上記の設定ができていれば単語にカーソルを合わせてctrl + k
で利用箇所の一覧が出てきます。
リファクタリング等で使う場合はthinca/vim-qfreplace
というプラグイン入れると便利です。
先ほどの利用箇所の一覧がquickfix のウィンドウにある状態で:Qfreplace
と打ち込むと新しい画面(バッファ)が出てきます。ここで好きな置換等で書き換えてwq
で抜けると変更した箇所が反映されます。
メソッド名の置換、引数の変更等が捗りますね。
参考:http://blog.supermomonga.com/articles/vim/qfreplace-benri.html
ちなみに当然、ctagsとgtagsの両方を使う必要はないです。
私はphp以外の言語用に両方はいってるから紹介しただけなので使いやすいものを選べば良いと思います。
vimdiff a.txt b.txt
詳細は以下で
参考:http://nanasi.jp/articles/howto/diff/merge_diff.html
:shell
上記でターミナルに制御が移ります。
exit
上記で抜けるとvimに戻ってきます。
ファイル全体でhogeをfugaに置換する。
:%s/hoge/fuga/g
置換場所を確認しながら実行する場合はc
をつける。
:%s/hoge/fuga/gc
hitした箇所で以下のように聞かれるので置換するならy
しないで次いくならn
になります。
replace with hoge (y/n/a/q/l/^E/^Y)?
参考:https://github.com/osyo-manga/vim-over
上記のpluginを入れるとビジュアル的にできるようです。
NeoBundle 'terryma/vim-multiple-cursors'
:NeoBundleInstall
参考:http://qiita.com/sachin21/items/cfcb81bf4d1073429b68
上記に画像付きで説明があります。
NeoBundle 'git://github.com/scrooloose/syntastic.git'
:NeoBundleInstall
設定は以下を参照すると良い。
参考:http://yuzuemon.hatenablog.com/entry/2014/08/13/135412
書ききれないので私がphpで使ってるpluginを列挙だけしときます。
railsやjavascriptとかも含むともっとある。。。
" テキストオブジェクト拡張
NeoBundle 'git://github.com/tpope/vim-surround.git'
"入力補完機能
NeoBundle 'git://github.com/Shougo/neocomplcache.git'
"vim 用の統合ユーザインターフェース
NeoBundle 'git://github.com/Shougo/unite.vim.git'
" 非同期処理
NeoBundle 'git://github.com/Shougo/vimproc.git'
" 整形
NeoBundle 'git://github.com/tsaleh/vim-align.git'
" プログラム実行
NeoBundle 'git://github.com/thinca/vim-quickrun.git'
" SQLの整形
NeoBundle 'git://github.com/vim-scripts/SQLUtilities.git'
" ファイラー
NeoBundle 'Shougo/vimfiler'
" indentの見える化
NeoBundle 'nathanaelkane/vim-indent-guides'
" デバック
NeoBundle 'joonty/vdebug'
" git連携
NeoBundle 'git://github.com/tpope/vim-fugitive.git'
" スニペット
NeoBundle 'Shougo/neosnippet'
” スニペット集
NeoBundle 'Shougo/neosnippet-snippets'
” スニペット集
NeoBundle 'git://github.com/honza/snipmate-snippets.git'
" 見出し一覧
NeoBundle "Shougo/unite-outline"
" git の変更点見える化
NeoBundle 'airblade/vim-gitgutter'
" クリップボード連携
NeoBundle 'airblade/vim-gitgutter'
" html サポート
NeoBundle 'mattn/emmet-vim'
" Dash連携
NeoBundle 'rizzatti/dash.vim'
:wq!
個人的に良く設定する事を忘れないようにメモします。
$ sudo yum update -y
プラグイン管理ツールNeobundleをインストール
$ mkdir -p ~/.vim/bundle
$ yum -y install git
$ git clone git://github.com/Shougo/neobundle.vim ~/.vim/bundle/neobundle.vim
.vimrcの記述
コピペする時:set paste
すると自動インデントとかしないから嬉しい
" 最初に記述しておいたほうが良いもの============
" 文字コードの指定
scriptencoding utf-8
" ミュートにする。
set t_vb=
set visualbell
set noerrorbells
" プラグイン管理 NeoBundle ==============================================
" ファイルタイプの自動検出をしないようになる。
" neobundleなどのプラグインを読み込むときは一度filetypeをoffにしておく必要がある
filetype off
if has('vim_starting')
set runtimepath+=~/.vim/bundle/neobundle.vim/
endif
call neobundle#begin(expand('~/.vim/bundle/'))
call neobundle#end( )
" Let NeoBundle manage NeoBundle
NeoBundleFetch 'Shougo/neobundle.vim'
" Recommended to install
" After install, turn shell ~/.vim/bundle/vimproc, (n,g)make -f
" your_machines_makefile
" ここから使いたいプラグインを書く =========================
" Dirのtree表示
NeoBundle 'scrooloose/nerdtree'
" ソースをVim上で実行
NeoBundle 'thinca/vim-quickrun'
" Markdown記法をHTMLに変換
NeoBundle 'Markdown'
" クオートや括弧の対を自動入力
NeoBundle 'Townk/vim-autoclose'
" シンタックスチェックをする
NeoBundle 'scrooloose/syntastic'
" ファイルタイプの自動検出、ファイルタイプ用の プラグインとインデント設定を自動読み込みするようになる。
filetype plugin indent on
" Installation check.
NeoBundleCheck
" シンタックスチェック scrooloose/syntasticの設定============================
let g:syntastic_check_on_open = 0
let g:syntastic_enable_signs = 1
let g:syntastic_echo_current_error = 1
let g:syntastic_auto_loc_list = 1
let g:syntastic_enable_highlighting = 1
let g:syntastic_php_checkers = ['php', 'phpcs', 'phpmd']
" なんでか分からないけど php コマンドのオプションを上書かないと動かなかった
let g:syntastic_php_php_args = '-l'
set statusline+=%#warningmsg#
set statusline+=%{SyntasticStatuslineFlag()}
set statusline+=%*
" 自分のセッティング===========================================================
" ハイライト
syntax on
" スワップファイルはいらない
set noswapfile
" バックアップファイルもいらない
set nobackup
" タブ文字を半角スペースが挿入"
set expandtab
" 対応する括弧やブレースを表示する
set showmatch
" 行を超えてもバックスペースキーによる編集が可能
set backspace=2
" 行番号表示
set number
" ステータス行に表示させる情報の指定
set statusline=%<%f\ %m%r%h%w%{'['.(&fenc!=''?&fenc:&enc).']['.&ff.']'}%=%l,%c%V%8P
" ショートカットキー マッピング ====================================================
" プラグインコマンドショートカット
map ,n <ESC>:NERDTreeToggle<CR>
map ,r <ESC>::QuickRun<CR>
map ,m <ESC>::QuickRun markdown<CR>
" 開いているPHPファイルを自動整形する
map ,f <ESC>:! php-cs-fixer fix %<CR>
" 貼り付け用
map ,a <ESC>::set paste<CR>
" Ctrl-jにESCの役割を担ってもらう。
imap <c-j> <esc>
" for php
map ,p <ESC>:!php -l %<CR>
" for perl
map ,t <ESC>:%! perltidy -q -pbp<CR>
map ,w <ESC>:!perl -wc %<CR>
" 全角スペースの表示================================================================
function! ZenkakuSpace()
highlight ZenkakuSpace cterm=underline ctermfg=lightblue guibg=darkgray
endfunction
if has('syntax')
augroup ZenkakuSpace
autocmd!
autocmd ColorScheme * call ZenkakuSpace()
autocmd VimEnter,WinEnter,BufRead * let w:m1=matchadd('ZenkakuSpace', ' ')
augroup END
call ZenkakuSpace()
endif
" インデント Indent ==============================================================
set autoindent " 自動でインデント
"set paste " ペースト時にautoindentを無効に(onにするとautocomplpop.vimが動かない)
set smartindent " 新しい行を開始したときに、新しい行のインデントを現在行と同じ量にする。
set cindent " Cプログラムファイルの自動インデントを始める
" softtabstopはTabキー押し下げ時の挿入される空白の量,0の場合はtabstopと同じ,BSにも影響する
set tabstop=2 shiftwidth=2 softtabstop=0
" 連続インデント
vnoremap < <gv
vnoremap > >gv
if has("autocmd")
"ファイルタイプの検索を有効にする
filetype plugin on
"そのファイルタイプにあわせたインデントを利用する
filetype indent on
" これらのftではインデントを無効に
"autocmd FileType php filetype indent off
autocmd FileType apache setlocal sw=4 sts=4 ts=4 et
autocmd FileType aspvbs setlocal sw=4 sts=4 ts=4 et
autocmd FileType c setlocal sw=4 sts=4 ts=4 et
autocmd FileType cpp setlocal sw=4 sts=4 ts=4 et
autocmd FileType cs setlocal sw=4 sts=4 ts=4 et
autocmd FileType css setlocal sw=2 sts=2 ts=2 et
autocmd FileType diff setlocal sw=4 sts=4 ts=4 et
autocmd FileType eruby setlocal sw=4 sts=4 ts=4 et
autocmd FileType html setlocal sw=2 sts=2 ts=2 et
autocmd FileType java setlocal sw=4 sts=4 ts=4 et
autocmd FileType javascript setlocal sw=2 sts=2 ts=2 et
autocmd FileType perl setlocal sw=4 sts=4 ts=4 et
autocmd FileType php setlocal sw=4 sts=4 ts=4 et
autocmd FileType python setlocal sw=4 sts=4 ts=4 et
autocmd FileType ruby setlocal sw=2 sts=2 ts=2 et
autocmd FileType haml setlocal sw=2 sts=2 ts=2 et
autocmd FileType sh setlocal sw=4 sts=4 ts=4 et
autocmd FileType sql setlocal sw=4 sts=4 ts=4 et
autocmd FileType vb setlocal sw=4 sts=4 ts=4 et
autocmd FileType vim setlocal sw=2 sts=2 ts=2 et
autocmd FileType wsh setlocal sw=4 sts=4 ts=4 et
autocmd FileType xhtml setlocal sw=4 sts=4 ts=4 et
autocmd FileType xml setlocal sw=4 sts=4 ts=4 et
autocmd FileType yaml setlocal sw=2 sts=2 ts=2 et
autocmd FileType zsh setlocal sw=4 sts=4 ts=4 et
autocmd FileType scala setlocal sw=2 sts=2 ts=2 et
endif
escape ^Tt
shelltitle "$ |bash"
hardstatus alwayslastline "[%c]%`%-w%{=b bw}%n %t%{-}%+w"
bind s
startup_message off
autodetach on
defscrollback 1024
screen
screen
screen
screen
screen
# rpm -ivh http://swiftsignal.com/packages/centos/6/x86_64/the-silver-searcher-0.13.1-1.el6.x86_64.rpm
# yum -y install multitail
# cd /var/log/httpd
# multitail -f access_log -f error_log
# yum -y install dstat sysstat
yum update してもUTCに戻らないやり方
# vim /etc/sysconfig/clock
ZONE="Asia/Tokyo"
UTC=false
# cp /usr/share/zoneinfo/Japan /etc/localtime
# date
Thu Sep 4 10:37:21 JST 2014
※再起動
# /etc/init.d/crond restart
# free
# dd if=/dev/zero of=/mnt/swapfile bs=1M count=1280
# mkswap /mnt/swapfile
# swapon /mnt/swapfile
# chmod 0644 /mnt/swapfile
# free
# sudo vim /etc/fstab
これを追記
/mnt/swapfile swap swap defaults 0 0
# echo "LANG=ja_JP.UTF-8" > /etc/sysconfig/i18n
# yum install -y man-pages-ja
頻繁に作るかもなので、以下のシェルスクリプトを作っておく。
引数にユーザ名入れよう。
自動でwheelにもいれる
標準出力された鍵は忘れずにコピーして保存
#!/bin/bashif[$# -ne 1];thenecho"指定された引数は$#個です。" 1>&2
exit 1
fi
cat <<__EOT__ユーザ名 $1 ユーザを作ります。__EOT__user=$1
useradd $user -G wheel
passwd $user
mkdir /home/$user/.ssh
cd /home/$user/.ssh
ssh-keygen -t rsa
mv /root/.ssh/id_rsa.pub /home/$user/.ssh/authorized_keys
mv /root/.ssh/id_rsa /home/$user/.ssh/${user}_rsa
chmod 600 /home/$user/.ssh/authorized_keys
chmod 700 /home/$user/.ssh
chown -R $user:$user /home/$user/.ssh
cat /home/$user/.ssh/${user}_rsa
権限変更してrootで実行する
# chmod 700 useradd.sh
# ./useradd.sh hoge
sudoしたいならvisudoでwheelを有効にする。
# visudo
%wheel ALL=(ALL) ALL
初期のec2-userにはパスワードが無いので設定しておく
# passwd ec2-user
New password: 任意の文字列
Retype new password: 任意の文字列
# visudo -f /etc/sudoers.d/cloud-init
NOPASSWDを消して、以下に変更する。
ec2-user ALL=(ALL) ALL
# User rules for ec2-user
ec2-user ALL=(ALL) ALL
TypeScript 1.5.0-alphaがリリースされましたね!
TypeScriptの1.5では, ES6対応や, Annotation(Decorator)等の言語の対応だけでなく, TSServerというエディタ向けツールが含まれています.
TSServerは, コンパイルやリファクタリングなど、エディタに必要な機能を提供するServerです. 標準入出力を介して, エディタに様々な情報を提供してくれる優れものです.
MicroSoftが提供しているSublime TextのPluginも, このTSServerを使って実装されています.
とはいえ、僕はVim使い。残念なことに, MicroSoftはVim向けのPluginまでは作ってくれませんでした.
ということで, TSServerを利用したVim plugin tsuquyomiを作りました.
tsuquyomiは現状で、下記をサポートしています:
TypeScriptを最新化します:
npm -g install typescript
tsuquyomiはShougo/vimproc.vimを利用します. 事前にInstallしておいてください。
(Windows版であれば, kaoriyaのgvimには最初からvimprocがバンドルされています)
Vim のplugin管理にNeoBundleを使っているのであれば, .vimrcに下記を追記して, :NeoBundleInstall
を実行すると, vimproc, tsuquyomiの双方がinstallされます.
NeoBundle 'Shougo/vimproc'
NeoBundle 'Quramy/tsuquyomi'
vimprocは下記でruntimeをbuildしてください(https://github.com/Shougo/vimproc.vim#installも参照の事):
cd ~/.vim/bundle/vimproc
make
FileTypeがtypescriptであれば、omni補完が有効化されます. <Ctrl-x><Ctrl-o>
を補完したい箇所でタイプしてください.
<Ctrl-]>
を任意のSymbol上でタイプすると, そのSymbolが定義されている箇所へジャンプします. 定義が別ファイルの場合, windowをsplitして定義箇所を表示します.
(ちなみに, /// <reference path="..." />
とかでタイプすると, .d.tsファイルを開くことができます)
<Ctrl-^>
を任意のSymbol上でタイプすると, そのSymbolを参照している箇所の一覧をlocation listで表示します.
(但し, 参照箇所として認識するのは, 現在Vimで開いているバッファに限定されます.)
バッファの保存時, コンパイルエラーとなっている箇所をQuickfixウィンドウに表示します.
SymbolのRename機能を提供します.
デフォルトではkey mapしていませんが, <Plug><TsuquyomiRenameSymbol>
をmapすれば呼び出せるようになります.
例えば, 下記は「,e」をマップする例です.
let mapleader =","noremap \ ,
augroup typescript_key_mapping
autocmdFileType typescript nmap <buffer><Leader>e<Plug>(TsuquyomiRenameSymbol)
augroup END
tsuquyomiには他にも幾つか機能があります. 詳細は, READMEか, help docを見てください.
今後, outline(unite-outlineと連動させたい)等を追加していく予定です.
tsuquyomiを作成する上で, TSServerの利用方法も大体身についたので, 機会があればまとめて記載します(あんまり需要無い気もするけど...).
Powerlineに関する情報、Font Patchに関する情報はたくさんあったのだが、微妙に自分の環境と異なるところがあったり、細かいところで結構時間を取られたのでメモを残しておく。
Font Patchをあてないと、矢印とかのNon ASCIIな文字が化けてしまう。参照
Ricty-Regular.ttf
があればよい
Ricty-Bold.ttf
も。% git clone https://github.com/Lokaltog/powerline-fontpatcher
% fontforge -lang=py -script ./powerline-fontpatcher/scripts/powerline-fontpatcher Ricty-Regular.ttf
Ricty Regular for Powerline.ttf
というファイルが生成されるopen .
して、ダブルクリックすればよし。Preference -> Profiles -> Text
で、Non-ASCII FontにインストールしたFontを設定するlet g:Powerline_symbols = 'fancy'
set laststatus=2
dyld:Library not loaded: /usr/local/lib/libjpeg.8.dylib
解決方法
sudo ln -s /usr/local/Cellar/jpeg/8d/lib/libjpeg.8.dylib /usr/local/lib/
この記事は、vimをIDEとして利用するための方法を記述していく連載、Vim as IDEの第1回です。この回では、vimで多くのプラグインを管理する場合に必須とも言えるパッケージマネージャー、NeoBundleについて解説します。
Neobundleは暗黒美夢王たるShougoさんによって作られた、vimプラグインのパッケージマネージャーです。Neobundleを導入することにより、下記の様なメリットを享受することが出来ます。
というわけで、多数のvimプラグインを導入する場合はマストで入れておきたいプラグインです!
NeoBundleは下記の手順で導入することが出来ます。
具体的には、下記のコマンドで導入出来ます。お手軽ですね。
$ mkdir -p ~/.vim/bundle
$ git clone git://github.com/Shougo/neobundle.vim ~/.vim/bundle/neobundle.vim
NeoBundleの導入が完了したら、:NeoBundleInstallコマンドによるプラグインのインストールが可能になります。
例えば、vim上でファイルを閲覧するためのプラグインvimfilerをインストールする場合、まず下記を.vimrcに追記しvimを再起動します。
if has('vim_starting') " 初回起動時のみruntimepathにneobundleのパスを指定するsetruntimepath+=~/.vim/bundle/neobundle.vim/endif" NeoBundleを初期化call neobundle#begin(expand('~/.vim/bundle/'))" インストールするプラグインをここに記述
NeoBundle 'Shougo/vimfiler'call neobundle#end()" ファイルタイプ別のプラグイン/インデントを有効にするfiletype plugin indent on
neobundle#beginはNeobundleを初期化するための関数です。引数には、先ほど作成したbundle管理用のディレクトリを指定します。「~/.vim/bundle/」以外のパスでプラグインを管理したいという場合は適宜変更してください。「~/.vim/bundle/」でプラグインを管理する場合は、引数のデフォルト値も同様の値となってるので、引数を省略してneobundle#begin()と書くことも出来ます。
また、NeoBundleの後に続いて書かれているパスはgithub上でのリポジトリの場所です。ここではよく"Shougo"という文字が現れますが、これはプレフィックスとして必要な文字というわけではなく、単にShougoさんが有益プラグインを大量に作ってくれているためです。感謝しましょう。
「filetype plugin indent on」は、Ruby/PHPなどのファイルタイプを検出しファイルタイプ別のプラグインやインデントを有効にする処理です。この位置まではプラグインのロードが完了していないので、このタイミングで記述します。
次に、ノーマルモード時に: NeoBundleInstallコマンドを入力することで、先ほど作った~/.vim/bundleディレクトリ内にunite.vimがダウンロードされ、読み込まれます。
:NeoBundleInstall
無事インストールが完了すれば、:VimFilerコマンドを入力することでファイラーが起動するはずです。
:NeoBundleUpdateコマンドを実行することにより、最新版があるプラグインはアップデートを実施することが出来ます。また、下記のように記述することで特定のプラグインのみをアップデートすることも可能です。インストールの指定時と違って、リポジトリのパスではなくプラグイン名のみを指定していることに注意してください。Shougo/vimfilerではなくvimfilerだけでOKです。
:NeoBundleUpdate vimfiler
.vimrcからNeoBundle XXXの記述を消し、NeoBundleCleanコマンドを実行することでプラグインの削除を行うことが出来ます。こちらも、引数にプラグイン名を指定することにより特定のプラグインのみ削除することが可能です。先ほどインストールしたVimfilerを削除する場合は、.vimrcからNeoBundle 'Shougo/vimfiler'を削除し、下記のコマンドを実行します。
:NeoBundleClean vimfiler
NeoBundleCheckコマンドを.vimrcに記述しておけば、わざわNeoBundleInstallコマンドを叩かなくともvim起動時に未インストールプラグインがあった場合は対話的にインストールしてくれます。
call neobundle#end()" NeoBundleCheck を走らせ起動時に未インストールプラグインをインストールする
NeoBundleCheck
" ファイルタイプ別のプラグイン/インデントを有効にするfiletype plugin indent on
通常、NeoBundleで読み込んだプラグイン達へのパスはruntimepath(読み込むべきプラグイン達のパスを格納した変数)に追加されます。しかし、vimプラグインでないリポジトリをNeoBundleを利用して管理したいという場合もあります。
このようなケースでは、NeoBundleFetchコマンドを利用することにより、runtimepathにパスを追加することなく対象リポジトリをNeoBundleで管理することが出来ます。また、このNeoBundleFetchはNeoBundle自身をNeoBundleで管理するためにも使うことが出来ます。例えば、下記のように記述することでNeoBundle自体の最新版が配布されたとき、:NeoBundleUpdateで更新することができるようになります。
" NeoBundleを初期化call neobundle#begin(expand('~/.vim/bundle/'))" NeoBundleをNeoBundle自体で管理する
NeoBundleFetch 'Shougo/neobundle.vim'
アンチパターンとして、下記の様に他のリポジトリと同じ形で記述するとうまく動作しない場合があるので気をつけてください。
" !!!注意!!! うまく動作しない場合がある記述法
NeoBundle 'Shougo/neobundle.vim'
[ref] http://d.hatena.ne.jp/osyo-manga/20140512/1399901014
NeoBundleは非常に便利で強力なプラグイン管理機構ですが、それがゆえに調子に乗ってプラグインを入れすぎて、vimの起動が遅くなってしまうという悲しい状況もあり得ます。そこで、特定の状況になるまでプラグインのロードを遅延させることができるのが、NeoBundleLazyです。基本的には、NeoBundleをNeoBundleLazyに置き換え、下記のように記述することで特定の状況になるまでロードを遅延させることが可能になります。
NeoBundleLazy 'Shougo/vimfiler', {
\ 'autoload' : { 'commands' : [ 'VimFiler' ] },
\ }
上記の例では、VimFilerというプラグインを、:VimFilerコマンドを叩いて起動させるまでは読み込みを行わない、という指定になります。このように、普段は使わないプラグイン、特定の状況のみ利用するプラグインを遅延ロードさせることで、大量のプラグインを管理していてもvimの起動を高速化することが可能になります。
例えば、rubyを書くときのみvim-rubyというプラグインを利用したい、というケースでは下記のように記述することで遅延ロードさせることが出来ます。
" rubyでのみvim-rubyを読み込む
NeoBundleLazy 'vim-ruby/vim-ruby',{
\ "autoload" : {"filetypes" : ["ruby"]}
\}
NeoBundleについての解説はここまでです。さらに知りたい場合は、公式のリポジトリの解説やIssuesを見るのが良いでしょう。
https://github.com/Shougo/neobundle.vim
連載第2回では、vim 用の統合ユーザインターフェースunite.vimについての記事を書く予定です。
学生時代、初めてコードを書き始めてからこれまでずっとvimを利用して来て、いろいろな知見も溜まって来ました。その中で、様々な機能やプラグインを利用することにより、カスタマイズしたvimは完全ではなくともある程度はIDEに近い機能を搭載することができるんじゃないかと感じています。
そこで、この知見を自分のためにも一度まとめておこうと思い、vimについて不定期にまとめを書いてみることにしました。もう知ってるよって話も多いかもしれませんが、さらにこんな便利なものがある、とかこういうやり方の方がスマートだ、という話があれば指摘頂ければ嬉しいです。
また、最近ではAtomやRubyMine、PhpStormなどのIDEが主流になりつつあるし、それらが非常に便利だということも理解してるのですが、それでもあえてvimを使いたいという奇特な若者のために、有益な情報を提供できれば幸いです。
まず、IDEとは何でしょう。IT用語辞典にわかりやすい説明があったので、見てみましょう。
プログラムのソースコードを記述するためのテキストエディタを中心に、ライブラリや開発中のクラスなどの仕様や内部構造を表示する機能、ソースコードから実行可能ファイルを構築(ビルド)するための機能や、コードとともにデータやドキュメントなどを一括して管理するプロジェクト管理機能、ファイルの新旧の版管理や複数人による編集を管理するバージョン管理機能、ステップ実行やインスペクションなどテストやデバッグを支援する機能などを持っていることが多い。プラグインなどの拡張機構を用いて、後から対応言語や機能を増やすことができるものもある。
エディタは一般的なテキストエディタとして機能に加え、入力途中の文字列から予約語や関数名、プロパティ名、メソッド名などの候補を推測して自動的に提示してくれるコード補完機能や、予約後や区切り文字などを認識して色分けして見やすくする機能、コンパイルエラーなどが発生した場所をエラーメッセージ等とともに強調表示する機能など、コード記述に特化した便利な機能が盛り込まれていることが多い。
IT用語辞典 e-Warodsより
http://e-words.jp/w/IDE-2.html
rubyやPHPの場合、そもそもビルドやコンパイルは必要ないのでスキップするとして、それ意外についてはvimで実現可能なものが多いです。つまり、vimはIDEであるということがわかります(強引)。
LL言語以外はvimで書かないのかってツッコミもあるとは思いますが、経験上例えばObjective-cとかはさすがにXcodeで書いた方が良いと思います。ひとまずこの連載では、LL言語、特にrubyを書くときにvimをIDE(っぽいもの)として利用する、というケースを想定して記事を書いていこうと思ってます。
この連載では、vimで下記の様な機能を利用できるようにし、vimをIDE(っぽいもの)として使うための方法を順に記述して行きます。
次回は、まずはNeoBundleのお話です。すでに使ってるよって方も多いと思いますが、まずこれを導入している前提でないと他のプラグインの導入方法の説明が面倒なのと、NeoBundleとプラグインたちを上手く管理するための.vimrcの知見も書いてみようと思います。
エクセルのでセルの入力中にesc押すと入力が全部キャンセルされるのつらい。
場合によっては一度 CSV に書きだして vim で編集したほうが速いかもしれない。速くなくても精神衛生上よいかもしれない。
ということで便利そうなキーマップを設定。
nnoremap tl f,l
nnoremap th F,h
nnoremap td F,lvf,hd
nnoremap ts F,lvf,hc
nnoremap ty F,lvf,hy
nnoremap tp F,lvf,hp
tキーをprefixにした。
上から
$ vim -e +"redir! > list.txt" +hi +q!
一瞬 vim が立ち上がった後に list.txt を見ると :hi の結果が書き込まれてます。
welcome, user want to be vimmer.
ただ、この記事ではNeoBundleやカラーや独自セッチング、プラグインについては扱いません。
command | detail |
---|---|
h | move left |
j | move down |
k | move up |
l | move right |
0 | 先頭文字 |
$ | 行末 |
(数字){1}e | 数字分移動 |
gg | 先頭 |
G | 最後尾 |
vim ファイル名
<ESC> :q!
<ESC> :qw
command | detail |
---|---|
i | カーソル位置に追加 |
a | カーソルの次の文字として追加 |
A | 行末に追加 |
command | detail |
---|---|
d$ | カーソル位置から行末まで削除 |
de | カーソル位置から空白を含まない単語の末尾まで削除 |
dw | カーソル位置から空白を含む単語の末尾まで削除 |
(数字)?dd | 指定行削除▶バッファに格納される |
cf.)hoge fuga
# oの位置で各コマンドを打つと想定
d$ ▶ h
de ▶ h fuga
dw ▶ hfuga
command | detail |
---|---|
u | 直前のコマンドの取り消し |
U | 行全体の変更取り消し |
command | detail |
---|---|
/検索ワード | nで移動。%で記号の無効化 |
:set hls is | ハイライト表示になる |
:nohlsearch | ハイライト表示消す |
command | detail |
---|---|
:s/元の文字/置換後の文字/g | 元の文字を置換後の文字へ |
command | detail |
---|---|
v+y | ビジュアルモードにして選択後ヤンクする |
p | ヤンクしたものを貼り付け |
command | detail |
---|---|
:文字+Cntr-D | 補完文字出す |
:文字+<TAB> | 文字を保管する |
cf.):h
+ Cntr-D
:h
hardcopy helpfind helptags highlight
help helpgrep hide history
:h
:!+コマンド
退避v + : + w ファイル名
ペースト:r + ファイル名
実際、網羅しておらず、ほんのすこしの機能を紹介したに過ぎません。
困ったら、適宜 helpでオンライン検索ができるのでこちらを活用しましょう。
最後にエディタのコマンドはやって慣れるしかありません。
There is no substitute for hard work.
Finderの設定はこちら。
最近、vimに夢中になりつつあるのですが、vimを使っていると移動操作←↓↑→をhjklで実現したくなります。
最初Adobe Readerでhjklを使いたいと思いました。なぜAdobe Readerなのかは、おそらくMacただ一つの見開きで表示できるPDFビューアーだからです。
そこでMacだとキーバインドの変更はキーボードカスタマイズツールKarabiner(旧KeyRemap4MacBook)で実現できそうなことがわかりました。
『Vim以外でVimする: Mac編』やKarabinerマニュアルや『設定の追加の方法』などをなんとなく見て、多すぎるデフォルトの設定をさわったりしてみたのですが、まずAdobe Readerに設定が施せるのかわかりません。プロプライエタリなソフトなので根本的に無理な場合もあるのかもと思いました。(今考えてみると、たぶんKarabinerはプロプライエタリなソフトにこそ力を発揮するソフトですね。)
そこでダメモトでGoogle Group Karabiner-jpへ質問してみました。
で、なんとKarabinerの作者の方からAdobe Reader用のprivate.xml
をいただきました。(コードの下にGitHubのリンクもあります。)
<?xml version="1.0"?>
<root>
<item>
<name>Use "hjkl" keys as arrow keys in Adobe Reader.</name>
<identifier>private.hjkl_arrow_adobe_reader</identifier>
<only>ADOBE</only>
<uielementrole_not>AXTextField, AXTextArea</uielementrole_not>
<modifier_only>
ModifierFlag::NONE,
ModifierFlag::SHIFT_L | ModifierFlag::NONE,
ModifierFlag::SHIFT_R | ModifierFlag::NONE,
</modifier_only>
<autogen>__KeyToKey__ KeyCode::H, KeyCode::CURSOR_LEFT</autogen>
<autogen>__KeyToKey__ KeyCode::J, KeyCode::CURSOR_DOWN</autogen>
<autogen>__KeyToKey__ KeyCode::K, KeyCode::CURSOR_UP</autogen>
<autogen>__KeyToKey__ KeyCode::L, KeyCode::CURSOR_RIGHT</autogen>
</item>
</root>
https://github.com/tekezo/Files/blob/master/Karabiner/private.hjkl_arrow_adobe_reader/private.xml
で、実際に~/Library/Application Support/Karabiner/private.xml
へ保存し、GUIで[Reload XML](キャプチャ)を試してみると動く。(詳細はわかりやすいGUIキャプチャ画面付きの『設定の追加の方法』を参照してください。)とにかくうれしい。
補足:Adobe Acrobat Reader DCも、あとで見るKarabinerのEventViewerがApplication Bundle Identifierの値が同じなので、この設定で動作します。
遅ればせながら調べてみると、『MacのPreview.appでvimキーバインドを使って移動』の記事もありました。
そして、この記事を書いている間に、ドキュメントを調べる内にできることがだんだん掴めてきました。
使われているシンタックスはBasic syntaxなどにあるように、次のようになっています。
<name>:[Reload XML]
のボタンをおした時にKarabinerのPreference Panceにチェックリストの説明として表示されます。
<identifier>:設定IDです。ユニークなもので、private.
プリフィックスをつけることが推奨されています。
<only>:設定するアプリを指定します。今回はAdobe ReaderとKindleの<item>をそれぞれ作成していますが、<only>ADOBE, KINDLE</only>
と複数指定することもできます。指定できる名前はシンタックス2で説明している<appname>で定義されているIDです。
<uielementrole_not>:設定しないUI element roleを指定します。今回の設定ではテキストフィールド(AXTextField)とテキストエリア(AXTextArea)を除外しています。
<modifier_only>:今回の設定ではモディファイア(AltやCtrlなどキーの振る舞いを変更するキー)が押されていないときか、
シフトキーが押されていたときだけ<autogen>で設定されたキーバインドを有効にしています。
<autogen>:キーに割り振る振る舞いを定義します。
電子書籍管理はCalibreを使っているのですが、Kindle for Macの辞書機能は捨てがたいものがあります。
最初アプリの指定方法が、いただいたprivate.xml
には<appdef>
が存在しておらず、途方にくれたのですが、Filter: Specify applicationに回答がありました。(Adobe Readerの場合はすでに/Applications/Karabiner.app/Contents/Resources/appdef.xml
でADOBE
として定義されているのでprivate.xml
で改めて<appdef>
を定義する必要がなかったのでした。)
Filter: Specify applicationにあるようにKarabinerのEventViewerを起動して、Application Bundle Identifierにてアプリが特定できれば(キャプチャ)、下記の<appdef>
を追加するだけです。あとはAdobe Reader用の設定を少し修正するだけでした。(<?xml version="1.0"?>
と
<root></root>
の間に貼り付けてください。)
<appdef>
<appname>KINDLE</appname>
<equal>com.amazon.Kindle</equal>
</appdef>
<item>
<name>Use "hjkl" keys as arrow keys in Amazon Kindle</name>
<identifier>private.hjkl_arrow_amazon_kindle</identifier>
<only>KINDLE</only>
<uielementrole_not>AXTextField, AXTextArea</uielementrole_not>
<modifier_only>
ModifierFlag::NONE,
ModifierFlag::SHIFT_L | ModifierFlag::NONE,
ModifierFlag::SHIFT_R | ModifierFlag::NONE,
</modifier_only>
<autogen>__KeyToKey__ KeyCode::H, KeyCode::CURSOR_LEFT</autogen>
<autogen>__KeyToKey__ KeyCode::J, KeyCode::CURSOR_DOWN</autogen>
<autogen>__KeyToKey__ KeyCode::K, KeyCode::CURSOR_UP</autogen>
<autogen>__KeyToKey__ KeyCode::L, KeyCode::CURSOR_RIGHT</autogen>
</item>
<appdef>:デバイスを定義します。
<appname>:ユニークなID。/Applications/Karabiner.app/Contents/Resources/appdef.xml
に定義済みのものと被らないようにしましょう。
<equal>:KarabinerのEventViewerを起動してApplication Bundle Identifieに表示されるIDです。
Karabinerが動作する対象をフィルターする方法は、アプリ名で指定する方法(Filter: Specify application)の他には次のものもあります。
Finderの設定はデフォルトで入っています。『hjklキーでFinderを操作する』を参照してください。更に設定を追加する場合は標準設定を変更する方法(How to modify prepared settings)もありますし、Filter: Specify ui element roleにFinder用のhjklの設定があるのでそれを元に編集することもできると思います。
Calibreは電子書籍管理アプリで独自のビューアーもついているのですが、ビューアーは標準でvimライクに操作できるのですが、管理アプリは使えません。Adobe ReaderもKindleも同じ設定なので、一緒にまとめました。(あとCtrl+NとCtrl+Pで↓↑の設定の浮気をしています。)
<root><appdef><appname>KINDLE</appname><equal>com.amazon.Kindle</equal></appdef><appdef><appname>CALIBRE</appname><equal>net.kovidgoyal.calibre</equal></appdef><item><name>Use "hjkl" keys as arrow keys and "Crtl+N" and "Ctrl+P" as up/down in Adobe Reader, Kindle, Calibre</name><identifier>private.hjkl_and_ctrln_and_ctrlp_arrow_adobereader_kindle_calibre</identifier><only>ADOBE, KINDLE, CALIBRE</only><uielementrole_not>AXTextField, AXTextArea</uielementrole_not><autogen>__KeyToKey__ KeyCode::H, ModifierFlag::NONE, KeyCode::CURSOR_LEFT</autogen><autogen>__KeyToKey__ KeyCode::J, ModifierFlag::NONE, KeyCode::CURSOR_DOWN</autogen><autogen>__KeyToKey__ KeyCode::K, ModifierFlag::NONE, KeyCode::CURSOR_UP</autogen><autogen>__KeyToKey__ KeyCode::L, ModifierFlag::NONE, KeyCode::CURSOR_RIGHT</autogen><autogen>__KeyToKey__ KeyCode::N, ModifierFlag::CONTROL_L, KeyCode::PAGEDOWN</autogen><autogen>__KeyToKey__ KeyCode::N, ModifierFlag::CONTROL_R, KeyCode::PAGEDOWN</autogen><autogen>__KeyToKey__ KeyCode::P, ModifierFlag::CONTROL_L, KeyCode::PAGEUP</autogen><autogen>__KeyToKey__ KeyCode::P, ModifierFlag::CONTROL_R, KeyCode::PAGEUP</autogen></item></root>