Hatena::Groupvim

vimまっしぐら★ このページをアンテナに追加 RSSフィード

引っ越し後の日記はコチラです

tokoromのその他の日記

2011-04-19

VimとPythonとnoseとTDDと

| 03:09

noseのインストールとテストコードうんぬん

なにはともあれ、noseをインストールしてテストコードが実行される状態にするのが一番はじめ。

noseのインストールとテストコードの書き方については、

を参考にさせていただきました。

noseの実行

ひとまずnosetestsにパスが通っていれば、

:!nosetests

としてやれば、カレントディレクトリ以下のテストケースを勝手にさらってテスト実行してくれる。

便利!

quickrun.vim の利用

このままでも十分使えるが、quickrun.vim で簡単実行できたほうがなおよし。

quickrun.vim をインストールしたら、あとは .vimrc で以下設定を。

" testからはじまるpythonファイルをテストコードとする 
autocmd BufWinEnter,BufNewFile test*.py set filetype=python.test

" 自分の場合は Space q でquickrunを実行するようにしている 
silent! map <unique> <Space>q <Plug>(quickrun)

" quickrun.vim 用設定 
let g:quickrun_config = {}
let g:quickrun_config['*'] = {'runmode': "async:remote:vimproc", 'split': 'below'}
" ↑の2行あたりが既存なら↓の追加だけ 
let g:quickrun_config['python.test'] = {'command': 'nosetests', 'exec': ['%c -v %s']}

1行目の設定は、テストコードと思われるファイルを開いたとき、そのfiletypeを「python.test」とする設定*1

最終行の設定は、filetypeが「python.test」のときのquickrunの設定*2

実行

これでテストコードのファイルを開いてクイックラン*3!

f:id:tokorom:20110420031233p:image

でテストコード実行可能になりました。

備考

ちなみにここまではただテストコードを実行してみただけで、特にTDDではなかったり。。。

TDDするには、テストコード←→実装コードをぱぱっと切り替えたりとか、テストコード中の未実装の関数とかの入力支援とかあったら便利な気がする。

このあたりVim上で解決しているかたがいらっしゃいましたら是非ご教示を!

※現在、自作でそのあたりやってはいますが、まだ紹介できるレベルではありません

*1:名称は別のものでも構わない

*2:ただnosetestsを実行するだけの設定

*3:↑のとおりの設定なら Space q

JenayJenay2011/11/25 13:29Very true! Makes a chgane to see someone spell it out like that. :)

fbvwalzwipfbvwalzwip2011/11/27 01:443e5VVt <a href="http://aolqgwvdjhyb.com/">aolqgwvdjhyb</a>

dovoxpudovoxpu2011/11/29 03:488OefHx , [url=http://uelrhjbljeue.com/]uelrhjbljeue[/url], [link=http://tbpxxmqwrimm.com/]tbpxxmqwrimm[/link], http://kfzfevvnxdmn.com/

mdongnzmdongnz2011/12/01 20:46jPRbSA <a href="http://rzjuymnlbinq.com/">rzjuymnlbinq</a>

pvfiqqopvfiqqo2011/12/07 00:50tuZ8gU , [url=http://wakbxkimtsgj.com/]wakbxkimtsgj[/url], [link=http://vnmsiiaujqlf.com/]vnmsiiaujqlf[/link], http://moeudypgohmj.com/

2011-04-17

Vimで現在のバッファ(開いているファイル)のfiletypeを取得する方法

01:28

じつは &filetype だけだった

恥ずかしい話、取得できそうなのにできないな...と思っていたら、

&filetype

とするだけだった。

例えば、hoge.py を開いているときに

:echo &filetype

とすれば

python

と出力される。

ブログに書くほどのことじゃなさそうですが、正直、けっこう悩んでいるところだったのでメモっておきます。

必要になった経緯

quickrun.vim で使う設定を幾つか切り替えたいと思い、現在のfiletypeをVimScript上で利用したかった次第です。

  let g:quickrun_config[&filetype] = "略)変更後の設定"

pneumasterpneumaster2011/04/19 00:18こんにちは。
set filetype?も検討してみてください。
コマンドラインモードでの補完をしながら使えるのでいいかもしれません。

tokoromtokorom2011/04/20 02:25ありがとうございます!試してみます!

DiplonkDiplonk2012/03/26 05:45TYVM you've solved all my problmes

ubjoxxvkslubjoxxvksl2012/03/26 14:36DJowsV <a href="http://teffgloocepv.com/">teffgloocepv</a>

2010-10-02

FuzzyFinderの「FufFile **/」が最強:利用頻度1日数十回

12:00

fuf.vim の導入

FuzzyFinderは前から取り入れていたつもりだったのだが、恥ずかしながらたまーにタブがたくさんになりすぎたときにFufBuffer*1でバッファの中から任意のものを探すときくらいにしか使っていませんでした。

その頻度、1ヶ月に1回くらい。

そのため、なぜにFuzzyFinderがそこまで使われているかということを理解できていませんでした。


先日、ひさびさにFuzzyFinderBufferを使って、思い立ってこのプラグインを最新にしてみようと

を訪れたところ、ずいぶん新しくなっているよう。

プラグインのファイル名さえも fuf.vim に変わっておりびっくり。

※ちなみに今のバージョンは l9.vim という別のプラグインを入れないと動かないので注意


ということで、最新の fuf.vim を入れなおして、ヘルプやココなどを参照させていただいて、どんな機能が追加されているかなど確認していたら、どうやら

FufFile **/

というのがすごく便利とのこと。

FufFileはカレントディレクトリのファイル&ディレクトリを曖昧な単語で絞り込んでバッファに開けるというものなのだが、FufFile **/ とするとサブディレクトリの中のファイルも再帰的に検索してくれるので、

XCodeのプロジェクトのルートをカレントにして、その中のファイルならどれでも適当な単語を入力して開くことができる

ということになります。

これで「任意のファイルを開く」ことに関してはどんなIDEよりも便利になった気がします。

以下は実際に使っているスクリーンショットです。

ここでは「grid」とだけ打つことで、複数のディレクトリにあるそれっぽいファイルが候補としてあがってきています。

f:id:tokorom:20101002115256p:image


タブとの組み合わせでさらに常用!

私はVimのタブを愛用しているのですが、FuzzyFinder君は、基本的に

  • バッファ(タブ)の切り替え: FufBuffer
  • ファイルを開く: FufFile

となっており、それが統合されたら便利なのにな...と思ったわけですが、じつは普通にできるようです。

ヘルプを眺めていたら

<C-l> (|g:fuf_keyOpenTabpage|) - opens in a new tab page.

とあり、じつはファイルを絞り込んだ後に「Ctrl+l」でそのファイルをタブとして開けることがわかりました。

そして、既にそのファイルがタブになってれば当然そのタブに切り替わる!

ということで、vimrcで以下のようにキーバインドを切り替えておけば、

let g:fuf_keyOpen = '<Tab>'
let g:fuf_keyOpenTabpage = '<CR>'

既にそのファイルのタブがあるなしに関わらず「FufFile **/」一択で、選んだファイルをReturn*2すれば、プロジェクト内のファイルはどれでもすぐに簡単に開くことができるようになります。

単にファイルを開くというだけのことですが、これには感動すら覚えました。

そしてこれにより、FuzzyFiderの利用度が一日数十回以上に跳ね上がりました。

「ファイルを開く」「タブを切り替える」のどちらの操作でも使うようになったので当然と言えば当然です。


ちなみに、fuf_keyOpenのほうに<Tab>を設定しておくと、**/ をつけずにFufFileを使ったときに、ディレクトリを下っていく際に Tab*3を使い、ファイルが見つかったらReturnとできるので便利です。私はTerminalやVimのコマンドモードの補完を C-i でやっているのでそれが自然な操作でした。


ちなみに私の場合は、この他、FuzzyFinder関連のキーバインドは以下のようにしています。

nnoremap [MyPrefix].f             :<C-u>FufFile **/<CR>
nnoremap [MyPrefix].r             :<C-u>FufMruFile<CR>

今のところ「FufFile **/」「FufMruFile」以外は使っておりません。


とにかくFuzzyFinderのおかげでコーディング時間が1%くらい時間短縮された気がしているのです。

FuzzyFinderばんざーいっ!

FufFile **/ ばんざーいっ!!

*1:今はFufBufferというコマンド名になっているが、自分が使っていたのはFuzzyFinderBufferとなっていたのでずいぶん前のバージョンなんだと思う

*2:自分の場合はC-m

*3:自分の場合はC-i

BaybolatBaybolat2013/03/02 14:06That's a smart way of looknig at the world.

rbbppkrbbppk2013/03/04 16:04lPQOP4 , [url=http://jbhqxxlzkbzq.com/]jbhqxxlzkbzq[/url], [link=http://bcycxdbbqaof.com/]bcycxdbbqaof[/link], http://xxgcalzhmtnk.com/

divakpdivakp2013/03/06 08:37iYG6G7 <a href="http://lcimbfvtfcgs.com/">lcimbfvtfcgs</a>

gucutgphygucutgphy2013/03/08 02:30D08oBi , [url=http://kjztxkwhunod.com/]kjztxkwhunod[/url], [link=http://zlexqtyuymli.com/]zlexqtyuymli[/link], http://lkguxensgfiv.com/

GerryGerry2016/04/30 08:00Yours is a clever way of thkniing about it.

KerrynKerryn2016/05/03 13:19,Yet Canada is hardly the core of all of the weather and then the effects is miniature compared to the large black outs along with general inundating welcomed in all of the U.S. New england on Sunday along with The following friday. Typically the vulnerable weather is predicted carry elements to <a href="http://wgvkgbsmla.com">sulfcssculey</a> Asian Canada along with Quebec, canada , along with within Mondy.

DavionDavion2016/05/04 21:56Keep betelveraiing i post non stop here.I do enjoy life in my old age.I find it fun outing wites in the name of gawd.Keep pretending you are smarter than i.I will keep showing you a fool.Never lose sight of the fact that conservatives are mostly cited of the fact that liberals lose facts off their sites. It explains almost everything they don't do if they do it or don't do it.-Brain Fissure (lesion)Mold http://tpazjzglebk.com [url=http://mobwjt.com]mobwjt[/url] [link=http://vvclzpvkr.com]vvclzpvkr[/link]

2010-09-11

Happy Hacking Keyboard Pro2 でいつでもVimライクなカーソル移動

19:56

Happy Hacking Keyboard Pro2を購入して、けっこういいかんじに使い慣れてきた。

ただ1点、これはこいつの良い点であるのだが、はじめとまどったのが「カーソルキーが存在しない」ということ。

具体的なキー配置はこんなかんじなっている。

日本語配列のときにはあったカーソルキーがなくなって、Fnキーとの組み合わせでカーソル操作をするのだが、これは正直不便だと思った。

Modifyキーとの組み合わせなら組み合わせでVimライクに「hjkl」で操作できるならいいのになーと。


それならそうすればいいじゃんということで早速それを設定してみよう。

問題はどのModifyキーを使うかということだ。

よく使うControlやShiftはもってのほかだし、Commandキーも他機能とかぶることが多い。一番かぶらないのはFnキーだが、このキーは右下の離れた位置に配置されており、特に「hjkl」との相性は最悪だ。

と、残されたのはMacでいうと「Option (Alt)」キーだが、このキーこそほとんど使わないおあつらえむきのModifyキーだ。

実際に「Option + hjkl」と操作する他機能とかぶるときはどうするの?という問題はあるが、滅多に使わないそれらをつぶすデメリットよりも、いつでもVimライクな「hjkl」でのカーソル移動ができるメリットのほうが比較にならないくらい大きい。


そして、一番美味しいのは、このOptionキーが左手小指の付け根で押せる位置にあるということ。

これで、完全にホームポジションのまま「hjkl」によるカーソル移動が可能になる。

Vim使いにとってこれほど快適なことはない!

f:id:tokorom:20100911193633p:image

↑このキーを左手小指の付け根で押しながら「hjkl」でカーソル移動する!

f:id:tokorom:20100911153912j:image

↑実際に左手小指の付け根でキーを押している様子。


※実際にキー設定を変更する方法

Macの場合

実際、Macでこの設定をするには、KeyRemap4MacBookを使い、

Vi Mode」-「Option_L+hjkl to Left/Down/Up/Right」

を設定する。

Winの場合

Windowsの場合は、デフォルトではこのキーがそれなりに使う「Alt」キーになっているため、hjklとの組み合わせではあまり使わないWinキーに入れ替えておく。

この入れ替えがキーボードの背面のDIPスイッチハードウェア的にできるというのもこのキーボードの良いところだろう。

Win+hjklをカーソルキーに変換する方法だが、自分の場合はのどかで設定している。

↓が具体的な設定

# h/j/k/l で移動できるように
key *IL-*IC-~S-~C-~A-W-J = Down
key *IL-*IC-~S-~C-~A-W-K = Up
key *IL-*IC-~S-~C-~A-W-H = Left
key *IL-*IC-~S-~C-~A-W-L = Right

KasaneshKasanesh2012/03/25 16:38I appreciate you tkaing to time to contribute That's very helpful.

iphmdcgiphmdcg2012/03/25 19:43CwMocP <a href="http://yknkcnqawxfp.com/">yknkcnqawxfp</a>

xhwvrxwxxhwvrxwx2012/03/26 19:43YItb9K , [url=http://xbqhvbxzzkle.com/]xbqhvbxzzkle[/url], [link=http://icjtzopaqvep.com/]icjtzopaqvep[/link], http://bvfrmccawtov.com/

2010-08-21Vimでコピーした内容をしばらく保持しておいて後から貼り付ける

Vimでなんらかの文字列をコピーした内容を、しばらく各種操作したあとに後から貼りつけたくなる。

emacsのYankRingみたいなものを実現するpluginもあるが、Vim使いとしてはレジスタを使ってなんとかしたいところ。

操作としては

:let @y=@*

クリップボードを利用していないなら * を 0 に置き換える

として適当な名前付きレジスタ(ここでは y )にクリップボードの内容を逃がしておき、他の各種操作が終わったあとに、

"yp

で先程逃がしておいたレジスタの内容を貼り付けるというこになる。


とは言え、ちょっとこれを毎回やるのは面倒だったのでこれらを簡略化するためにキーマップを追加

noremap [MyPrefix] <Nop>
map <Space> [MyPrefix]

" クリップボードの内容を名前付きレジスタに逃がす
nnoremap [MyPrefix]" :<C-u>let @y=@*<CR>

" 名前付きレジスタからペースト
nnoremap [MyPrefix]p "yp
nnoremap [MyPrefix]P "yP

※ここでは[MyPrefix]に<Space>を当てているが、これをお好みで。


これで、クリップボードの内容をしばらく取っておきたいときに「<Space>"」で逃がしておける。

そして、「<Space>p」「<Space>P」で好きなタイミングで貼り付ける。


<Space>をprefixとした操作を 名前付レジスタを使うものと位置づけると、

" 名前付きレジスタにヤンク
nnoremap [MyPrefix]y "yy
" 名前付きレジスタにヤンクして削除
nnoremap [MyPrefix]d "yd

というのもありだと思う。


今のところこれを気に入って使っている。

NextschoolNextschool2012/03/25 15:31Calling all cars, clailng all cars, we're ready to make a deal.

fhjczgnfhjczgn2012/03/25 18:006ey9k3 <a href="http://bmvaecupbkpp.com/">bmvaecupbkpp</a>