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

[一日一Vim](その10)globalコマンド

$
0
0

参考サイト

http://vimmer.blog5.fc2.com/

http://qiita.com/0829/items/6df968408d52b949aac0

http://nanasi.jp/articles/howto/editing/global-head.html

global コマンド

:g/{検索語句}/{コマンド}という形で使用するようです。
{検索語句}にヒットする行に対して{コマンド}が実行できるようになるようです。
:g//dで直前に検索した文字を含む行を削除できるようです。
:g//m$で直前に検索した文字を含む行を末尾に移動する。という動作になるようです。
いったいどういう時にメリットがあるのか不明ですが、コマンド部分を変えると、色々できそうだなぁと感じました。

また、VIM達人への道さんの、検索行の数値をインクリメントするというコマンドは私は以外と使うので、重宝しそうだなぁと思います。

雑談

vim 上達で調べると、先人方のありがたいサイトがヒットして嬉しい限りです。行くサイト行くサイトで感心することばかりです。vimは奥が深いですね。


zshのbindkeyとprompt

$
0
0

bindkey

emacsとvi

bindkey -s

キーバインドには一括した設定が用意されています。切り替えは、以下の様なキーを設定すると分かりやすいです。

~/.zshrc
bindkey -sv '^e''bindkey -e\n'

bindkey -se '^v''bindkey -v\n'

bindkey -e,v

個人的には以下のように設定しています。

~/.zshrc
function airchrome-bindmode-emacs (){
bindkey -e
}
zle -N airchrome-bindmode-emacs
bindkey -v '^e' airchrome-bindmode-emacs
bindkey -a '^e' airchrome-bindmode-emacs

function airchrome-bindmode-vi (){
bindkey -v
}
zle -N airchrome-bindmode-vi
bindkey -e '^v' airchrome-bindmode-vi

bindkey -v

prompt

bindkey_mode

しかし、上記では現在どのキーバインドを使用しているのか分かりにくいです。よって、以下のようにプロンプトに表示すると分かりやすいです。

~/.zshrc
# prompt-bindkey_mode# http://mba-hack.blogspot.jp/2014/04/zsh.htmlfunction airchrome-bindmode-emacs (){
bindkey -e
EMACS_INSERT=`bindkey -lL main | cut -d ' ' -f 3`if echo$EMACS_INSERT| grep emacs > /dev/null 2>&1;thenEMACS_INSERT="%K{black}%F{011}⮂%k%f%K{011}%F{034} % $EMACS_INSERT %k%f"VIM_NORMAL="%K{011}%F{125}⮂%k%f%K{125}%F{015} % NORMAL %k%f%K{125}%F{black}⮂%k%f"VIM_INSERT="%K{011}%F{075}⮂%k%f%K{075}%F{026} % INSERT %k%f%K{075}%F{black}⮂%k%f"elseEMACS_INSERT="%K{black}%F{034}⮂%k%f%K{034}%F{011} % $EMACS_INSERT %k%f"VIM_NORMAL="%K{034}%F{125}⮂%k%f%K{125}%F{015} % NORMAL %k%f%K{125}%F{black}⮂%k%f"VIM_INSERT="%K{034}%F{075}⮂%k%f%K{075}%F{026} % INSERT %k%f%K{075}%F{black}⮂%k%f"fiRPS1="$EMACS_INSERT${${KEYMAP/vicmd/$VIM_NORMAL}/(main|viins)/$VIM_INSERT}"RPS2=$RPS1
zle reset-prompt
}
zle -N airchrome-bindmode-emacs
bindkey -v '^e' airchrome-bindmode-emacs
bindkey -a '^e' airchrome-bindmode-emacs
 
function airchrome-bindmode-vi (){
bindkey -v
EMACS_INSERT=`bindkey -lL main | cut -d ' ' -f 3`if echo$EMACS_INSERT| grep emacs > /dev/null 2>&1;thenEMACS_INSERT="%K{black}%F{011}⮂%k%f%K{011}%F{034} % $EMACS_INSERT %k%f"VIM_NORMAL="%K{011}%F{125}⮂%k%f%K{125}%F{015} % NORMAL %k%f%K{125}%F{black}⮂%k%f"VIM_INSERT="%K{011}%F{075}⮂%k%f%K{075}%F{026} % INSERT %k%f%K{075}%F{black}⮂%k%f"elseEMACS_INSERT="%K{black}%F{034}⮂%k%f%K{034}%F{011} % $EMACS_INSERT %k%f"VIM_NORMAL="%K{034}%F{125}⮂%k%f%K{125}%F{015} % NORMAL %k%f%K{125}%F{black}⮂%k%f"VIM_INSERT="%K{034}%F{075}⮂%k%f%K{075}%F{026} % INSERT %k%f%K{075}%F{black}⮂%k%f"fiRPS1="$EMACS_INSERT${${KEYMAP/vicmd/$VIM_NORMAL}/(main|viins)/$VIM_INSERT}"RPS2=$RPS1
zle reset-prompt
}
zle -N airchrome-bindmode-vi
bindkey -e '^v' airchrome-bindmode-vi
 
bindkey -v

bindkey -lL main | cut -d ' ' -f 3で現在のキーバインドを取得してます。

最終行のbindkey -vはデフォルト設定です。-aはviのノーマルモードです。

show_buffer_stack

zshのコマンドラインスタックをプロンプトに表示させる

コマンドラインスタックをプロンプトに表示することもできます。

~/.zshrc
# prompt-show_buffer_stack# https://gist.github.com/yukirin/7067299#bindkey "^Q" show_buffer_stacklocal p_buffer_stack=""local -a buffer_stack_arr

function make_p_buffer_stack(){if[[ ! $#buffer_stack_arr> 0 ]];thenp_buffer_stack=""return    fip_buffer_stack="%F{cyan}<stack:$buffer_stack_arr>%f"}function show_buffer_stack(){local cmd_str_len=$#LBUFFER[[ cmd_str_len > 10 ]]&&cmd_str_len=10
    buffer_stack_arr=("[$LBUFFER[1,${cmd_str_len}]]"$buffer_stack_arr)
    make_p_buffer_stack
    zle push-line-or-edit
    zle reset-prompt
}function check_buffer_stack(){[[$#buffer_stack_arr> 0 ]]&&shift buffer_stack_arr
    make_p_buffer_stack
}

zle -N show_buffer_stack
bindkey "^Q" show_buffer_stack
add-zsh-hook precmd check_buffer_stack

RPROMPT='${p_buffer_stack}'

branch

記号なども使えます。この辺りは、vim-powerlineで使われてるものが参考になりますね。

~/.zshrc
zstyle ':vcs_info:git:*' stagedstr "⇊"
zstyle ':vcs_info:git:*' unstagedstr "⭠"

話は変わりますが、最近、vimのステータスラインをvim-airlineに変更してみました。

~/.vimrc
let g:airline_theme             ='powerlineish'let g:airline_enable_branch     = 1
let g:airline_enable_syntastic  = 1

" vim-powerline symbols
let g:airline_left_sep          ='⮀'let g:airline_left_alt_sep      ='⮁'let g:airline_right_sep         ='⮂'let g:airline_right_alt_sep     ='⮃'let g:airline_branch_prefix     ='⭠'let g:airline_readonly_symbol   ='⭤'let g:airline_linecolumn_prefix ='⭡'let g:airline#extensions#tabline#enabled = 1

お勧めのキーバインドがあれば、是非、教えて下さい。

VsVimのC-[を使えるようにする

$
0
0

VsVimのC-[がうまく動かない

Visual Studioの拡張で、VsVimがある。
Vimと同じ操作ができていい。

だけど、C-[がうまく動いてくれない!

直す方法

  1. Visual Studioのオプション画面を開く
  2. 環境→キーボードを開く
  3. 「選択.選択解除」を選ぶ
  4. ショートカットキーの枠内で「C-[」を押す
  5. 割り当てボタンを押す

その他

他に、もっとい方法があると思う。。

VimでPHPの補完にスニペットを使ったら捗った件

$
0
0

この記事はVim Advent Calendar 2013 149日目の記事です。

今までVimでPHPを編集する際に、関数名の補完のために辞書ファイルを使っていましたが、Neosnippet用のスニペットファイルを使うようにしたら、ものすごくいい感じになりました。

snip.gif

PHPは標準関数がたくさんあるのでとてもいい感じです。入力が楽になるのはもちろんですが、引数の順序が紛らわしい関数に翻弄されずに済みそうなのがいいですね!

なお、生成したスニペットファイルはGithubに上げておきました。必要であればコピペして使ってください。

もしNeosnippetを使ってないならすぐにインストールしましょう!
特にPHPみたいに定型文がよく出てくる言語でコードを書くときは大変便利です。

ちなみに、元ネタはEmacsの「php-auto-yasnippets」というプラグイン。

autoloadにも対応したり色々と洗練されているみたいですね。
ただ、標準関数以外はスニペットを作っても効果が薄そうだなーと思ったので、手抜きで事前に生成したファイルを使う方式を採用しました。

Vim でのメモ環境

$
0
0

Vim でのメモ環境を少し使いやすくするために試行錯誤したのでメモ。

Vim でメモを取るときは現在 memolist.vimを使わせて頂いておりますが、
やはり Markdown はそれなりの Viewer で確認したかったので Kobito との連携を模索し始めたわけです。

メモ

  • memolist のファイルは Drowpbox で管理して複数の Mac でも同期できていた
  • Kobito に入れてしまうと Kobito と memolist で2重に管理することになる
  • Kobito に保存したものは ~/Library/Kobito/Kobito.dbにある(sqlite かよ
  • if_lua で SQL 書くかとも思ったが、そこまでやる気にならず
  • Kobito を cli から操作するツールもあたってみたが、いまいちしっくりこない
  • しかし Kobito のファイル連携は魅力
  • memolist にあるメモは現在20件ほど
  • Kobito ではメモを編集したあととメモ読み返すときに使えればいい。終わったら削除でいい
  • Kobito の起動は Alfred に任せればいいや

結論

  • メモを作成したときに Kobito に突っ込んでしまおう
  • メモがいらなくなったら Vim と Kobito からそれぞれ消す
  • Kobito の制御(起動、フォーカスなど)は他のツールに任せる
  • メモの同期は memolist のほうで保存先をしていして Dropbox でやることにする

ということで最低限の設定はこうなりました。NeoBundle 周辺の設定は省略しています。

.vimrc
" NeoBundle
NeoBundle 'Shougo/unite.vim'
NeoBundle 'glidenote/memolist.vim'
NeoBundle 'fuenor/qfixgrep.git'

" memolist.vim settings
let g:memolist_path = "~/Dropbox/vim/memolist"
let g:memolist_template_dir_path = "~/.vim/template/memolist"
let g:memolist_memo_suffix = "md"
let g:memolist_memo_date = "%Y-%m-%d"
let g:memolist_prompt_tags = 1
let g:memolist_qfixgrep = 1
let g:memolist_filename_prefix_none = 1
let g:memolist_unite = 1
let g:memolist_unite_source = "file_rec"
let g:memolist_unite_option = "-auto-preview -start-insert"

" command
command! -nargs=0 -bar KobitoAdd execute 'silent !open -a Kobito.app ' . expand('%:p')
command! -nargs=? MyMemoNew :call memolist#new(<q-args>)|w|KobitoAdd

" keymap
nnoremap <Space>mn :<C-u>MyMemoNew<CR>
nnoremap <Space>ml :<C-u>MemoList<CR>
nnoremap <Space>mg :<C-u>MemoGrep<CR>
~/.vim/template/memolist/md.txt
# {{_title_}}
- - -
date: {{_date_}}
tags: [{{_tags_}}]
- - -

当面はこれで運用してみようと思います。

参考

http://qiita.com/Linda_pp/items/ec458977a6552050855b
https://github.com/glidenote/memolist.vim

Vimをメモ帳程度に使うために覚えておくべきコマンド

$
0
0

メモ帳というのは例のnotepad.exeのことです。

この記事について

Vimの使い方が全然分からなかったあの頃。TeraTermからメモ帳にコピペして編集してまたコピーして、TeraTermに貼り付け直したような経験はありませんか?私は沢山あります。

実機のコンソールを使っているときなど、コピペ作戦が使えないこともあるので、「とりあえずメモ帳でできるくらいのことはできる」ようにコマンドをまとめてみました。

「ファイル」と「編集」はメモ帳のメニューと合わせています。

基本操作

似たような機能はバッサリ省きました。

やりたいことVimでのコマンド覚え方備考
キャンセルESCEscape最重要コマンド 困ったらとりあえずESC
カーソル移動h j k l左下上右最悪、カーソルキーでも移動はできる
半画面スクロールCTRL-D CTRL-UDown UpCTRL-E CTRL-Yで行単位スクロール
1文字削除(前)x※小文字カーソル位置の文字を削除 Deleteキーと同じ
1文字削除(後)X※大文字カーソルの前を削除 BackSpaceキーと同じ
挿入モードa iAppend Insertカーソルの後か前のどっちから入力始めるかの違い
ビジュアルモードvVisual選択する Vだと行単位での選択になる

画面下に--INSERT--とか--VISUAL--と表示されていれば、そのモードになってます。
ESCを押せばノーマルモードに戻ります。他にも入力を待ち受けるタイプのコマンドをキャンセルするときにもESC。困ったらESC。

ファイル

「ファイルを開く」ダイアログは出せませんが、ファイルパスの指定にはTABキーでの補完が聞きます。
ついつい!をつけたくなりますが、普段はつけないように癖付けておいたほうが無難です。

やりたいことVimでのコマンド覚え方備考
新規作成$ vimファイルパス存在しないファイルを指定すると、新規作成
開く:eファイルパスEditVimを開いている状態で別のファイルを開きたいときに
上書き保存:wWrite!をつけると強制上書き
名前を付けて保存:wファイルパスWrite既に存在する場合はエラー !をつけると強制上書き
終了:qQuit未保存の場合はエラー !をつけると強制終了

編集

Vimの世界では、クリップボード的なところにテキストを置くことを ヤンクすると言います。
ビジュアルモードで範囲選択してヤンクしたりする操作がちょっと戸惑うけど、メモ帳をマウス無しで使おうとするとShift押しながらカーソルで選択してCtrl-C押したりするので、手間は大して変わらないはず。

やりたいことVimでのコマンド覚え方備考
元に戻すuUndoCtrl-RでRedoもできる
切り取り選択後 dDelete削除と思いきや、バッファに入る
コピー選択後 yYank
貼り付けpPastePでカーソルの前に貼り付け
削除選択後 dDeleteヤンクせずに削除するコマンドは無いっぽい?
検索/検索文字列カーソル位置は検索対象に含まない
次を検索nNextNで逆方向に検索
置換:%s/置換前/置換後/gSubstitute%を付けないと、カーソル行内で検索
行へ移動行番号 GGo to100行目に移動なら100Gと入力
すべて選択ggVGggで先頭へ Vで行選択モード Gで末尾へ

その他

メモ帳にはないけど、とりあえずのときにも便利なコマンド。

やりたいことVimでのコマンド覚え方備考
チュートリアル$ vimtutor jaVim Tutor 日本語版30分くらいでVimの使い方が一通り学べる
行番号の表示:set number
保存して終了ZZ非常に押しやすい

おまけ

最悪、iaを押して挿入モードに入ってしまえば、カーソルキーで移動できるしバックスペースで削除もできるので、とりあえずの編集はできてしまいます。本当に急いでいるときはこれも有り。

uでアンドゥするときに、一度の挿入モードで編集した内容が全部戻ってしまうので、そこは注意。

GNU screenのスクロールバッファをvimで開いて、コピーモードのかわりに使う方法

$
0
0

GNU screenのコピーモードは、vi風操作が可能ですが、以下の動作がvimと違って使いにくいので、
スクロールバッファを一時ファイルに保存してvimで編集するための方法です。
(vim以外のエディタでも同様の方法が可能)

  • 日本語上でのw等による単語単位移動の動作が異なる
  • 矩形選択方法が異なる(右端マーク操作)
  • i"等のtext-objectは未対応(Wによる単語選択がある程度)
  • )による文単位の移動等は未対応

(ふと、MS-DOSでVz Editorを常駐させてコンソール出力をコピーしていたのと同様のことができないかと思いついたので。)

また、複数の離れた場所からコピーする必要がある場合、
「コピーモード開始、コピー対象文字列の場所に移動、コピー対象文字列を選択、ペースト」
を繰り返す手間がかかるのに対し、vimで編集する方法であれば、
コピーモード開始は1回ですみ、ペーストしたい文字列を編集して作ってから、1回だけペースト操作をすれば良くなります。

.screenrc
minmsgwait0defscrollback1000bufferfile$HOME/tmp/screen-xchgbindVeval'msgwait0'copy'stuff"g G$>"'screen'stuff"vim +$ $HOME/tmp/screen-xchg;exit^M"' 'msgwait1' 'echo""'

備考:

  • msgwait 0で、邪魔になるメッセージ表示を抑制。
  • g G$>で、スクロールバッファを最初から最後までコピーしてbufferfileに書き出し。
  • screen 'stuff "vim ..."'で、新しくwindowを作ってそこでvimを起動。vimが終了されたらシェルをexitしてwindowを閉じる。
  • vim +$で、起動後に:$を実行して最終行に移動。
  • echo ""で、msgwait 1実行によって表示されるメッセージを即時消去。

vimからscreenのコピーバッファへのコピー

vimからscreenのコピーバッファへのコピーは、fakeclip.vim参照。
(もしくは、以下の記事のYankToScreen()参照。
http://qiita.com/deton/items/61466d630edbac6734ae#3-5 )
また、vimを直接呼ぶかわりに、一時ファイルを編集・保存したら、
その内容をscreenのコピーバッファに反映する以下のスクリプトを呼ぶ形でも可。

vsbuf
#!/bin/sh# edit file and copy to screen's buffer
vim +$ $HOME/tmp/screen-xchg
screen -X eval'msgwait 0' readbuf 'msgwait 1'

bashのedit-and-execute-command(C-xC-e)との組み合わせ

エディタ起動後、vimで画面分割してscreenのコピーバッファを開いて、コマンドライン編集の参考用に使えるようにする。
(やっぱりコマンドライン実行したくなくなった場合はvimを:cqで終了)

.screenrc
bindEeval'msgwait0'copy'stuff"g G$>"' 'stuff"^X^E:sp ~/tmp/screen-xchg^MG"' 'msgwait1' 'echo""'

複数行を,付きで連結してのコピー

screenのコピー機能の、複数行を,付きで連結してのコピー等は、vim側で適当に編集すればいいかと思っています。
めったに使わないので。
({dir1,dir2,dir3}/*.htmlのように指定したい場合くらいしか使ったことが無いです。)

スクロールバッファに対してスクリプトを実行

vim起動以外にも、適当なスクリプトを作って、
直前のコマンドの出力結果のみを抽出したり等も可能。

(主にコマンドを実行した後になって何かしたい場合用。
コマンド実行前ならパイプを使えばいいので。)

直前のコマンドの出力結果を抽出してコピーする例:

.screenrc
bindPeval'msgwait0'copy'stuff"g G$>"'screen'stuff"picklastout.sh;exit^M"' 'msgwait1' 'echo""'# 以下では動かない模様。#bind P eval copy 'stuff "?deton@colinux:^Mnj /deton@colinux:^Mk$ "'

例: 直前の出力結果抽出スクリプト(vim(あるいはed)をバッチモードで使用)

picklastout.sh
#!/bin/sh
cp ~/tmp/screen-xchg ~/tmp/picklastout
vim -e -s ~/tmp/picklastout < ~/bin/picklastout.ed
#ed -s ~/tmp/picklastout < ~/bin/picklastout.ed > /dev/null 2>&1# remove last "\n"
head -c -1 ~/tmp/picklastout > ~/tmp/screen-xchg
screen -X eval'msgwait 0' readbuf 'msgwait 1'
picklastout.ed
$
?^deton@colinux:
1,.d
/^deton@colinux:/d
w

備考:

  • deton@colinux:はプロンプト文字列。要変更。
  • シェルのコマンド引数としてペーストして使いやすいように、最後の改行を削除

例: 直前の出力結果抽出スクリプト(awk版)

picklastout.sh
#!/bin/sh
cat $HOME/tmp/screen-xchg | picklastout.awk >$HOME/tmp/picklastout
mv $HOME/tmp/picklastout $HOME/tmp/screen-xchg
screen -X eval'msgwait 0' readbuf 'msgwait 1'
picklastout.awk
#!/usr/bin/awk -fBEGIN{prevout="\n";}# CHANGEIT: prompt string/^deton@colinux:/{if(out!=""){prevout=out;}out="";next;}{out=out$0"\n";}END{# remove last "\n"printf("%s",substr(prevout,0,length(prevout)-1));}

備考: スクロールバッファ内容は表示内容なので元の出力と異なる場合あり

通常のscreenでのコピーと同様に以下は気を付ける必要あり。

  • タブがスペースに展開される
  • less等で長い行を表示した際、折り返されると、継続行とみなされない。

lynxの表示をコピーしたい場合のlynx側設定

lynxを使う場合、1スクリーンへの表示ごとにscrollback bufferがクリアされるので、
以下の設定をlynx.cfgでしておいた方が良いかもしれません。
さっき見ていたページの内容を参照したいことがよくあるので。
(遅いマシンだと少しちらつきが多くなるのが気になりますが)

lynx.cfg
ENABLE_SCROLLBACK:TRUE

関連

.screenrc
bindPeval"copy""stuff -k ku""stuff Y""stuff \033"# 以下でいい気も。#bind P eval "copy" "stuff kY"

(GNU Screenバージョン4.2がリリースされましたの記事からたどって、GNU Screen Watch: January 2011 - April 2013より。)

rails.vimの基本動作を確認してみた

$
0
0

自分用のメモにrails.vimの基本動作を確認してみた。

rails.vimのインストール

ここから https://github.com/tpope/vim-rails

モデルTodoから、Controller,Viewに切り替えるには

:Econtroller
:Eview ビュー名(newやeditなど):Emodel
:Ehelper

モデル名を明示して、MVCを切り替えるには

例:モデルroleを表示する.
vim
:Econtroller roles
:Eview roles/ビュー名(newやedit,showなど)
:Emodel role

名称はtabを押すと色々と補完してくれる。

gfの動作

ソースを見た方が早いのかもしれない・・・。

  • クラス名でgf => そのクラスの定義ファイルに移動する.
# カーソルがApplicationController上でgfを入力するclassRolesController<ApplicationController
  • controllerのメソッド名でgf => viewがある場合はそのビューファイルへ
classRolesController<...# カーソルがこの行にある状態でgfを入力する.defindex# メソッド中にあるRole.methodなどでもgfしたら、role.rbに移動# するかと思いきや、ファイルが見つからないと怒られてしまった。# パスの設定不足?...endend
  • モデル中のattr_accessible,has_many, メソッド中のモデル名でgf(attr_accessibleはrails4では非推奨) => モデルクラスがある場合は、その定義ファイルへ
classRole<ActiveRecord::Base# Userが存在する場合、userにカーソルをあててgfを入力する.# name(string)では飛ばないattr_accessible:name,:userdefsample# ここでgfを入力すると、user.rbへuserendend
  • viewの'form'などでgf => 対応するviewファイルへジャンプ

  • 以下でgfしても反応無し?

    • helper
    • js
    • scheme.rb
    • routes.rb

:Aコマンド (関連ファイルに切り替え)

(カーソル位置に依らない?)

凡例: :Aを実行したファイル => 移動先ファイル

  • モデル => モデルテスト
    例:role.rb => role_test.rb

  • ビューファイル => コントローラテスト
    例:roles/_form.html.erb => roles_controller_test.rb

  • ヘルパー => ヘルパーテスト
    例:roles_helper.rb => roles_helper_test.rb

  • application.js => application_heler.rb

  • xxx.js => application.js

  • scss => 反応無し

  • migration => 定義済みのmigrationファイルを循環する

  • scheme.rb => seeds.rb

  • seeds.rb => scheme.rb

  • application.rb => routes.rb

  • routes.rb => application.rb

:Rコマンド

(カーソル位置に依る)

  • RolesController => RolesHelper
  • RolesController::index => views/roles/index.html.erb
  • views/roles/index.html.erb => RolesController::index
  • Roles => schema.rb
  • schema.rb => カーソルのあるモデルクラス
  • RolesHelper => RolesHelerTest
  • environment.rb => routes.rb
  • routes.rb => application.rb
  • application.rb => routes.rb

vi(vim) で文字エンコーディングを指定してファイルを開く

$
0
0

以下は EUC-JP でファイルを開く例

vi -c ":e ++enc=euc-jp" filename

インサートモード移行時にインデントを行う[vim]

$
0
0

症状

oOなどでインサートモードに入るとインデントが調整された位置にカーソルが移動するのに,空行でiを押してもインデントが調整されない

解法

" smart indent when entering insert mode with i on empty linesfunction! IndentWithI()if len(getline('.'))==0return"cc"elsereturn"i"endifendfunctionnnoremap<expr>i IndentWithI()

空行の場合はccで一行上のインデントを踏まえた位置にカーソルを移動.空行でなければ普通のiの動作

参考

http://stackoverflow.com/questions/3003393/vim-smart-indent-when-entering-insert-mode-on-blank-line
上サイトのanserを合わせてシンプルな解法になるようにしています.

agでvimの検索関連を高速化

$
0
0

agがとにかく高速で検索できるそうなので今更試してみた。
そしたらすごく速くなった!

ag のインストール

公式の手順が確実です。
https://github.com/ggreer/the_silver_searcher

Mac

$ brew install ag

CentOs

$ rpm -ivh http://swiftsignal.com/packages/centos/6/x86_64/the-silver-searcher-0.14-1.el6.x86_64.rpm
# or $ rpm -ivh http://swiftsignal.com/packages/centos/6/i386/the-silver-searcher-0.14-1.el6.i686.rpm

Windows

手順通りソースからビルドするか、以下からバイナリを利用させていただく。

The Silver Searcher windows port
http://blog.kowalczyk.info/software/the-silver-searcher-for-windows.html

コマンドから利用

$ ag hoge

オプション(一部)

オプション意味
-a隠しファイルおよび無視リストも対象
-gファイル名で検索
-G検索対象の指定 [ag -G *.css]
-l一致したファイル名のみ
-L一致していないファイル名のみ
-v不一致検索
-Q正規表現を無視
-z圧縮ファイルも対象

無視ファイルリスト

.agignoreで指定可能

ag の検索で除外設定を使う - Qiita

vimで利用

ag.vim

.vimrc
NeoBundle 'rking/ag.vim'

コマンド

コマンド結果
:Agカレントディレクトリを再帰的に検索して quickfix へ
:AgAdd:Ag同様だが結果を追加
:AgFromSearch前回の検索パターンを使用(/による検索など)
:LAg:Ag同様だが、結果を location-list へ
:LAgAdd:AgAdd同様だが、結果を location-list へ
:AgFileファイル名の検索
:AgHelpvimのドキュメントが検索対象

quickfixでの操作

コマンド内容
e開くと同時に終了
o開く
goプレビュー
tタブで開く
Tタブで開く(silently)
h水平分割で開く
H水平分割で静く(silently)
v垂直分割で開く
gv垂直分割で開く(silently)
q終了

結果

速い!

Unite.vim と組み合わせる

Unite.vimはインストール済みとして。

.vimrc
" カーソル位置の単語をgrep検索
nnoremap <silent> ,cg :<C-u>Unite grep:. -buffer-name=search-buffer<CR><C-R><C-W>

" unite grep に ag(The Silver Searcher) を使う
if executable('ag')
  let g:unite_source_grep_command = 'ag'
  let g:unite_source_grep_default_opts = '--nogroup --nocolor --column'
  let g:unite_source_grep_recursive_opt = ''
endif

参考:agとUnite.vimで快適高速grep環境を手に入れる - Thinking-megane

結果

速い!

ctrlp.vim と組み合わせる

ctrlp.vimはインストール済みとして。

.vimrc
let g:ctrlp_user_command = 'ag %s -l'

結果

速い!

VimでrbenvのRubyバージョンを指定して構文チェックする

$
0
0

Vimのsyntastic使ってて、Rubyの新しいハッシュの書き方をすると、

ワーニングになるので気になっていた。
Vimではrbenvの設定をしていたけど、syntasticでしていなかったのが原因。

ちょっとハマったので、メモを残しておきます。

次の一行を.bashrcに追記して瞬殺。

'~/.rbenv/shims/ruby' 

zshを使ってる方はこちらをどうぞ。

Syntasticを使うときはzshenvにrbenvの設定を書きましょう

VimでRubyのインデントだけずれる

$
0
0

vimでgg=Gしてインデント整形してもテンプレートのrubyのブロックだけインデントされなかった。

syntasticだけでは不十分だったみたい。

下のplug-inを追加すれば綺麗にインデントされた。

.vimrcに下を追加して

NeoBundle 'vim-ruby/vim-ruby'

vimで
:NeoBundleInstall

github

bash/vim 初心者の為のTips

$
0
0

bashやvimは多くのショートカットやTipがありますが、初心者の自分がよく使うものだけ抜粋してみました。

bash

カーソル移動、削除のShortcut

  • Ctrl+a行頭に移動
  • Ctrl+e行末に移動
  • Ctrl+uカーソル位置から行頭までを削除

Command historyの後方検索

Ctrl+rで後方検索モードに入り、検索文字を入力。複数の候補がヒットする場合、Ctrl+rを押すたびに次の候補になります。

Alias

.bashrcによく使うコマンドのショートカットを登録しておきます。

.bashrc
alias term="ssh username@terminal.domain"

その他

  • cd -で1つ前のcurrent directoryに移動できます。

vim

大文字のものはShiftと一緒に押して下さい。

カーソル移動

  • k上に移動
  • j下に移動
  • h左に移動
  • l右に移動
  • 0行頭に移動(インデント無視)
  • ^行頭に移動(インデントの最後に移動)
  • $行末に移動
  • ggファイルの先頭に移動
  • Gファイルの最後に移動
  • 数字gg指定した数字の行に移動

エディタ設定

  • :se nu行番号を表示
  • :noh検索結果のハイライトを消去
  • :se paste貼り付けモードに移行。自動インデントされてしまう場合などに利用。
  • :se nopaste貼り付けモード解除

モード

  • Iカーソル行の先頭に移動して入力モードに。行頭に追加する場合に。
  • Aカーソル行の最後に移動して入力モードに。行末に追加する場合に。
  • oカーソル行の下に空行を追加して入力モードに。
  • Oカーソル行の上に空行を追加して入力モードに。

編集系

  • ddカーソル行を削除
  • 数字ddカーソル行から数字行分削除
  • d$カーソル位置から行末までを削除
  • 複数行に一括追加 (e.g. 先頭に#を追加、など)
    1. Ctrl+vで矩形選択モードに入る
    2. 追加したい行を複数選択して、IまたはA
    3. 追加する内容を入力してEsc

他にも思いついたら随時追加していきます。

vim自分用メモ

$
0
0

vimで文字列置換

一括置換したいとき

%s/対象文字列/置換文字列

スラッシュを文字列置換したいとき

s;対象文字列;置換文字列

置換文字列に改行を使いたいとき

改行を ctr+V ctr+M で入力


Keynoteに日本語コメントを含むコードをSyntaxHighlightしたい

$
0
0

Ruby初学者向けにスライドを作っている間に、
Keynoteに日本語コメントを含むコードを、シンタックスハイライトしたいと考えました。

見つけた日本語を含まないコードのシンタックスハイライトのする手法(rtf)は2つありました。

brew パッケージ highlightを使う方法

$ brew install highlight
 $ highlight -O rtf foo.rb | pbcopy

しかし、日本語を含んでしまうと、
クリップボードにコピーされてないです。

これの解決方法はわかりませんでした。

Pygments を使う方法

$ easy_install pygments
 $ pygmentize -O encoding=utf-8 -O style=monokai -f rtf -g hoge.rb | pbcopy

これは、日本語を含んでいると、
クリップボードにコピーされますが、化けます

print "foo" #=> 改”¹行¡Œなし
puts "foo"  #=> 改”¹行¡Œあり‚Š
p "foo"     #=> デƒ‡バッƒƒグ‚°用”¨途€”

Keynoteにはrtf形式の他、html形式でも貼れるようですので、そっちで試してみます。

結論は Vim

Vimでの見た目そのままにソースコードをKeynoteのスライドに貼り付ける方法
をすることで解決しました。。。
選ぶブラウザは、Chromeではダメでした。

できればコマンドライン上でやりたかったですが、致し方ないです。

試してないですが、Emacsでもできるみたいです。
Emacsでの見た目そのままにソースコードをKeynoteのスライドに貼り付ける方法

Windowsのvimでクリップボードにコピーする

$
0
0

Vimでのコピー方法を調べてたら「Visualモードでyを押せばテキストがコピーできて便利だぜ、ヤフゥー!」な紹介がすぐに見つかったのに他のソフトと連携するためにyankじゃなくてクリップボードにコピーする方法がちょっと見つかりにくかったので紹介します。

クリップボードにコピー

まずテキストを選択する。"*yと入力する。以上です。

参考

http://stackoverflow.com/questions/3961859/how-to-copy-to-clipboard-using-vim

Vimで検索実行後にカーソル位置を単語の末尾に設定させる方法

$
0
0

検索実行時に末尾に/eを追加すればOK

例)"test"の単語を検索して末尾のtの部分にカーソル位置を合わせたい場合
/test/e
として実行する。

もっと詳しく知りたい場合は
:h search-offset
に色々書かれてる

Vim実践的入門初級編

$
0
0

vimライトユーザの俺が説明する実践vim初級編

  • 対象者: vim使い始めたけど、なんか使いづらくね?って人
  • 期待される成果: ソースを編集するときはvimに頼り始める。メモ帳もコレ一本

ビジュアルモードについて

ビジュアルモードはいわゆる範囲選択です。
ビジュアルモードには次の3つの選択範囲があります。

  • ビジュアルモード
  • ラインモード
  • ブロックモード

順を追って説明します。

ビジュアルモード(通常選択), v
hogehogehoge
foofoofoo
barbarbar

ラインモード(行選択), V
hogehogehoge
foofoofoo
barbarbar

ブロックモード(単形選択), C-v
hogehogehoge
foofoofoo
barbarbar

v,V,C-vはそれぞれ選択開始時の入力キーです。
C-はControlキーと他のキーの組み合わせということは入門編にて説明しました。

さて選択中にヤンク(コピー)や削除をするのはもっともらしい使い方ですが、ブロックモードには更に利用価値があります。
例えば上記したブロックモードの選択中にIを押すとインサートモードに移りますので、frstなどと入力してノーマルモードに戻ると

hogefrsthogehoge
fooffrstoofoo
barbfrstarbar

となるかと思います。
あとはブロックモード中に>でインデント下げなどもよく使用します。

慣れないうちはこの3種のビジュアルモードに頼りがちですが、熟練するにつれてブロックモード以外使う必要がなくなってきます。
といってもそれぞれに十分に利用価値があるのでがしがし利用していきましょう。

vimrcについて

vimrcとはvimの設定ファイルのことです。
通常は ~/.vimrc に置いておきます。
vimrcを含めて.~のようなドットファイルをまとめて管理したい人はdotfilesをgithubで管理をご覧ください。

さてこの設定ファイル、私はかなり小さくまとめているつもりですが333行もありました。
たかがエディタの設定に数百行も書くことあるのか!?と疑問になるでしょうがあるんです。(しかも私はライトユーザです)
ということでオススメの設定を載せていきます。

" matchit {{{" if や for などの文字にも%で移動できるようになる
source $VIMRUNTIME/macros/matchit.vimletb:match_ignorecase =1" }}}" usability {{{" set t_Co=256は256色対応のターミナルソフトでのみ作用するので、Winのコマンドプロンプト使っている人などは ダブルコーテーションでコメントアウトしといてsett_Co=256" 色づけを on にするsyntaxon" カラースキーマを設定する。jellybeansは最初はないカラースキーマだが、次回説明するプラグインにて説明する。"colorscheme jellybeans" 今のところ好きなカラースキーマを使っていて大丈夫。colorscheme desert
" ターミナルの右端で文字を折り返さないsetnowrap" tempファイルを作らない。編集中に電源落ちまくるし、とかいう人はコメントアウトでsetnoswapfile" ハイライトサーチを有効にする。文字列検索は /word とか * ねsethlsearch" 大文字小文字を区別しない(検索時)setignorecase" ただし大文字を含んでいた場合は大文字小文字を区別する(検索時)setsmartcase" カーソル位置が右下に表示されるsetruler" 行番号を付けるsetnumber" タブ文字の表示 ^I で表示されるよsetlist" コマンドライン補完が強力になるsetwildmenu" コマンドを画面の最下部に表示するsetshowcmd" クリップボードを共有する(設定しないとvimとのコピペが面倒です)setclipboard=unnamed

" 改行時にインデントを引き継いで改行するsetautoindent" インデントにつかわれる空白の数setshiftwidth=4" <Tab>押下時の空白数setsofttabstop=4" <Tab>押下時に<Tab>ではなく、ホワイトスペースを挿入するsetexpandtab" <Tab>が対応する空白の数settabstop=4" インクリメント、デクリメントを16進数にする(0x0とかにしなければ10進数です。007をインクリメントすると010になるのはデフォルト設定が8進数のため)setnf=hex
" マウス使えますsetmouse=a" インサートモードの時に C-j でノーマルモードに戻る
imap <C-j><esc>" [ って打ったら [] って入力されてしかも括弧の中にいる(以下同様)
imap [ []<left>
imap (()<left>
imap { {}<left>" 2回esc を押したら検索のハイライトをヤメる
nmap <Esc><Esc> :nohlsearch<CR><Esc>" }}}

特に imap(インサートモード) とか nmap(ノーマルモード) のキーマッピングは使えます。
キーマッピングを記載することによって自分好みのショートカットが設定できるということですし。

imap < <>
と記載しておけばどうなるかは予測できますよね。
ちなみに記法は
imap or nmap 入力キー 実行すること
になります。
:(コロン)のあとにコマンドを書くとコマンドを実行してくれたりします。
,,など、一部のキーは特殊な記法になっているので注意してください。

最後に

紹介したvimrcについてはgithubやネットを調べれば自分好みの設定が見つかると思うので、いろいろ調べてみるのがいいと思います。
次回はプラグインに入っていこうかと思います。
正直今回紹介していこうかと思いましたが、長くなりましたので次回に回します。

vim に貼り付ける時、インデントがおかしくならないように貼り付ける

$
0
0

tmux とかからコードを vim に貼り付ける時に、
インデントがエライことにならないようにする方法。
ずっと前どこかで見かけたけど、忘れたのでここにメモっとく。

  1. tmux からコードをコピー
    <prefix> [
  2. vim のノーマルモードで以下のコマンド
    :a!
  3. tmux のペースト操作
    <prefix> ]
  4. esc キーを押下
    <esc>
Viewing all 5764 articles
Browse latest View live