タグ

ブックマーク / thinca.hatenablog.com (18)

  • Vim script で AtCoder に参戦する方法 - 永遠に未完成

    先週、進捗キャンプという知り合いで集まって進捗を出す会に行ってきて、そこで @haya14busa さんと表題の件について色々話した。 その後個人的に手法をカイゼンしたりしたので、結果をまとめておく。 AtCoder とは http://atcoder.jp/ 私自身も「とは」と言って語れるほど詳しくはないので簡単に説明すると、主に日人向けの競技プログラミングサイト。 問題は全て日語で、定期的に様々なコンテストが開催されている。問題の難易度が低い初心者向けのコンテスト(AtCoder Beginner Contest 通称 ABC)なんかもあるので、競技プログラミングの入口としては最適だ。 AtCoder の対応言語 競技プログラミングでは、ソースコードを提出し、提出されたコードが正しく動くかどうかサーバ側で実際に動かして検証を行う。つまり、サーバ側に各言語の処理系が必要であり、競技プ

    Vim script で AtCoder に参戦する方法 - 永遠に未完成
  • Google の Vim script Guide について言っておきたいこと - 永遠に未完成

    この記事は Vim Advent Calendar 2014 の 25 日目の記事です。 Google が、様々な言語に対する自社内でのスタイルガイドを公開しているのはご存知でしょうか。C++ のものや JavaScript のものなどがあり、この辺りは割と有名かと思います。 では、Vim script のものがあるのはご存知でしょうか? Google は、Vim script について、2 つのガイドを公開しています。 Google Vimscript Style Guide Google Vimscript Guide 前者がカジュアルユーザー向け、後者がヘビーユーザー向け、といった位置付けのようです。さすが、Google がまとめているだけあって、なかなかポイントを抑えています。 ただ、これはあくまで Google が社内向けに作ったもの。鵜呑みにしてはいけない、もしくは、一般の人が

    Google の Vim script Guide について言っておきたいこと - 永遠に未完成
  • git reset --hard HEAD を安全にした - 永遠に未完成

    昨日、git reset --hard HEAD してしまって大変なことになった話を書いた。私は普段これを cancel と言う名前に alias して使っている。 [alias] # 中略 cancel = reset --hard HEAD しかし前回のようなことがまたあってはたまらない。人間はミスするものだ。 alias があって実行しやすいのが問題なのだろうか? いや、割とよくする操作*1だし、alias しなくても使うだろう。 てことで、cancel が安全になるようにしてみた。 [alias] # 中略 cancel = !git commit -a -m 'Temporary commit for cancel' && git reset --hard HEAD~ 一旦コミットしてからそのコミットを消す。こうしておけば最悪 git reflog から元に戻せる。特にコミットす

    git reset --hard HEAD を安全にした - 永遠に未完成
  • threes.vim 作った - 永遠に未完成

    Threes! と言うゲームがあります。 http://threesgame.com/ スマホで遊べるパズルゲームで、単純なのになかなかハマります。先日行った TokyoVim#17 で @kana1 さんもハマっていたので、これは Vim 業界で流行りそうな予感です。 なので、Vim で遊べるように threes.vim 作りました。最低限な感じですが、とりあえず遊べるようになったので公開します。 https://github.com/thinca/vim-threes ルールは公式サイトを見てみてください。 :ThreesStart コマンドを実行すると、こんな感じで始まります。 hjkl で数字を移動していって、大きい数字を作っていきます。ゲームオーバーになるとスコアが出ます。 3327 点でした。 こんな感じで遊べます。今後色付けたりしてもうちょっと遊びやすくしていきたいです。よか

    threes.vim 作った - 永遠に未完成
  • KaoriYa 版で追加される機能まとめ - 永遠に未完成

    KaoriYa 版 Vim では日語を使う際に便利な patch が多数当てられている。patch 自体は体に付属しているが、そこ以外で体との差分をまとめたものが見当たらなかったので、patch を参考に家からの変更点をまとめてみた。 足りない部分や勘違いしている部分がある可能性があるので、突っ込み歓迎。 確認に使ったバージョン Vim 7.2-20090321 香り屋版 runtime syntax/memo.vim 新規に追加。どんなものかは README_w32j.txt を開いてみればわかる(このファイルが ft=memo に設定されている)。 syntax/java.vim javadoc コメント内の最初の一文は専用の色でハイライトされるが、"." だけでなく "。" で終わる部分も文として認識するように修正されている。 syntax/2html.vim ftp://~

    KaoriYa 版で追加される機能まとめ - 永遠に未完成
  • partedit.vim 更新した - 永遠に未完成

    遥か昔に partedit.vim と言うものを作ったのだけど、最近ちょっとあって更新してみた。 今月の TokyoVim#11 で、kawakami_o3 さんが文芸的プログラミング、具体的には Literate Haskell でうまいことインデントしようとがんばっていた。Literate Haskell はこんな感じのもの。 クイックソートだよ! > quicksort :: Ord a => [a] -> [a] > quicksort [] = [] > quicksort (p:xs) = (quicksort lesser) ++ [p] ++ (quicksort greater) > where > lesser = filter (< p) xs > greater = filter (>= p) xs 実行するよ! > main :: IO () > main = p

    partedit.vim 更新した - 永遠に未完成
  • 本当にキモい Vim script - 正規表現編 - 永遠に未完成

    Vim Advent Calendar 2012 の 339 日目の記事です。 先日、Lingr で :s コマンドの引数をパースする方法についての話になりました。 :s はご存知の通り、置換コマンドです。 :[range]s[ubstitute]/{pattern}/{string}/[flags] [count]今回 [range] と [count] は無視するとして、それ以外の {pattern} と {string} と [flags]、あとはパターン内でエスケープされているかもしれない区切り文字(多くの場合は /) が何になるか知りたい。 結果的にできたのは以下のような正規表現です。 \v^s%[ubstitute]([\x00-\xff]&[^\\"|[:alnum:][:blank:]])(%(\\.|.){-})%(\1(%(\\.|.){-})%(\1([&cegiIn

    本当にキモい Vim script - 正規表現編 - 永遠に未完成
  • quickfix を便利に使う設定 - 永遠に未完成

    Vim Advent Calendar 2012 の 220 日目の記事です。 最近の Vim Advent Calendar は子供が生まれたり結婚したりで大変めでたいことが続いていますね。良いことです。みなさんも Vim Advent Calendar で執筆すれば御利益があるかもしれませんよ? あ、ちなみに私はいつも通りです。特に変わったことはありません。 さて、今回は私が quickfix で行っている設定をいくつか晒してみたいと思います。 設定方法 quickfix ウィンドウは filetype=qf が設定されます。なので、filetype qf に対する ftplugin を書けばよいです。つまり、 ~/.vim/after/ftplugin/qf.vimもしくは ~/vimfiles/after/ftplugin/qf.vimこの辺りに設定を書いていきます。 p で pr

    quickfix を便利に使う設定 - 永遠に未完成
  • 意外と知られていない diff に関する機能 - 永遠に未完成

    Vim Advent Calendar 2012 の 147 日目の記事です。 137 日目の tyru さんの記事で、Vim の diff 機能について紹介がありました。この記事ではもう少し細かい diff の機能について紹介したいと思います。 :diffthis 比較したい対象がファイルではない場合、例えば、外部からデータを無名バッファにコピーしてきた場合に、それらのバッファの diff を表示したいことがあります。この場合は、:diffsplit は使えません。 こういう場合は :diffthis を使います。diff を適用したいバッファでそれぞれ :diffthis をすると、実行したバッファ同士の差分を見ることができます。 これを利用した設定に、help で紹介されている :DiffOrig があります。(:help :DiffOrig) これは現在編集中のファイルと、最後に保

    意外と知られていない diff に関する機能 - 永遠に未完成
  • カラースキームを作ってみよう - 永遠に未完成

    Vim Advent Calendar 2012 の 131 日目の記事です。 毎日のように Vim を使っているみなさんは、恐らくお気に入りのカラースキームがあったりすると思います。中には一部が気にわなくて改造してみたり、更にはすでに自作している方もいるかもしれません。 今回は、「カラースキーム作ってみたいけど作り方がよくわからない><」「改造して使ってるけど実はよくわかってないんだよね…」といった方を対象に、カラースキームの作り方について簡単に説明してみようと思います。長くならないように、適時端折っていこうと思います。 始めに ぶっちゃけてしまうと、最初は既存のカラースキームを改造するところから入るのが楽です。真似して書くとだいたいそれっぽくなるものです。 この記事では 0 から作ることを想定して解説していきますが、チュートリアル的な内容と言うより知識的な解説になっているので、改造だ

  • submode.vim とその設定例なんかを紹介 - 永遠に未完成

    Vim Advent Calendar 2012 の 62 日目の記事です。 私が毎日のようにお世話になっているプラグインの1つに、kana さん作の submode.vim と言うのがあります。結構昔からあり、かなり便利なのにあまり知られていないような気がします。これはもったいない!と言うことで今回はこの submode.vim について書こうと思います。 submode.vim とは https://github.com/kana/vim-submode submode.vim は、ユーザが自由にサブモードを定義できるプラグインです。…と言っても何のことやらさっぱりですね。 Vim には、複数のキー、つまりキーシーケンスによって成立するコマンドがたくさんあります。例えば <C-w>+ は現在のウィンドウの高さを変更します。そして、この複数のキー入力が必要な割に、連続で入力したいコマンド

    submode.vim とその設定例なんかを紹介 - 永遠に未完成
  • ujihisa.vim#3 に行ってきた - 永遠に未完成

    ujihisa.vim#3 に行ってきたよ。 vim-jpの活動報告 Vimの過去と現在と未来 - @kaoriya 発表資料: http://koron.github.com/ujihisa-201211/ vim-jp の紹介、在り方、そして今後のVimへの貢献の話など。 興味を持った方は vim-jp の活動に参加してみてはどうでしょう。発表資料にもあるように、気負う必要はないですよー。 The whirlwind evolution of TweetVim - @basyura 発表資料: http://www.slideshare.net/basyura/the-whirlwind-evolution-of-tweetvim tweetvim のすさまじい進化の軌跡の紹介。 徐々に進化していくプラグインの様子が見て取れた。 そしてプレゼン中に新バージョンをリリースするというサプラ

    ujihisa.vim#3 に行ってきた - 永遠に未完成
  • neocomplcache.vim のインクルード補完の使い方 - 永遠に未完成

    neocomplcache v3.06 より、インクルード補完(include_complete.vim)が実装された。作者の Shougo さん一押しの機能なのだが、どういった機能なのかよくわからない人もいると思うので勝手に解説してみる。間違っていたら突っ込みよろしく。 include とは Vim には標準で 'include' などのオプションがある。このオプションで C の #include や Java の import を探して、現在編集中のバッファと関係ありそうなファイルからキーワードを検索できたりする。 インクルード補完とは neocomplcache のインクルード補完は、これらの機能を利用して関係ありそうなファイルを探索し、そこから補完候補を出してしまおうという機能。もちろん結果をキャッシュしているので、1 度キャッシュしてしまえば Vim 標準のより速く動作する。 ど

    neocomplcache.vim のインクルード補完の使い方 - 永遠に未完成
  • 'tabline' を活用しよう - 永遠に未完成

    Vim Advent Calendar 2011 の 4 日目の記事です。 タブページ Vim 7 から追加されたタブページ(いわゆるタブ機能)、使っていますか? これによって複数の画面を扱うことが容易になりましたが、タブページの恩恵はこれだけではありません。それが今回紹介する 'tabline' です。 Vim の最上部にタブの情報を表示するための領域がありますが、実はこの部分は任意に設定することが可能です。これを利用すれば、最上部に任意の情報を表示することが可能になります。 始めの一歩 - タブページを表示する まずはタブページを表示する必要があります。デフォルトでは、タブページは複数のタブがあるときのみ表示するようになっています。追加の情報を表示するのなら、常に表示されていた方が良いでしょう。 また、gVimの場合はデフォルトだと GUI でタブが表示されます。これだと 'tabli

  • Vim プラグインの開発スタイルのお話 - 永遠に未完成

    Vim のプラグインって作ってる最中は Vim 自体の動作も不安定になりがちだし、普段の環境と同じ環境で作ってるとなにかと弊害が起きがち。ちょっとした変更ならまだしも、大規模な変更は 1 度の作業で終わらないこともあるし、作業中断して別のことをやることになったりするとさらに面倒。 または、VCS でプラグインを管理したくて、プラグインごとにリポジトリを独立したいけど環境分けるのが面倒だとか。 というわけで私が普段やってる Vim プラグインの開発スタイルを晒してみようと思う。 設定 私の vimrc には最後の方に以下の記述がある。 " Load settings for each location. augroup vimrc-local autocmd! autocmd BufNewFile,BufReadPost * call s:vimrc_local(expand('<afile

    Vim プラグインの開発スタイルのお話 - 永遠に未完成
  • Vimスクリプト基礎文法最速マスター - 永遠に未完成

    流行ってるみたいなので遅ればせながら便乗。需要?何それおいしいの? Perl基礎文法最速マスター - サンプルコードによるPerl入門 - Perlプログラミングの基礎から応用まで Route 477(2010-01-25) PHP基礎文法最速マスター - Shin x blog Python基礎文法最速マスター - LazyLife@Diary VBA基礎文法最速マスター - いろいろ解析日記 Java基礎文法最速マスター - いろいろ解析日記 Bash基礎文法最速マスター - いろいろ解析日記 Haskell基礎文法最速マスター - think and error Brainf*ck基礎文法最速マスター - このブログは証明できない。 VBScript 基礎文法最速マスター - CX's VBScript Diary - VBScript グループ JavaScript基礎文法最速マス

    Vimスクリプト基礎文法最速マスター - 永遠に未完成
  • vimrc基礎文法最速マスター - 永遠に未完成

    調子に乗って vimrc を書くのに特化した内容のものを書いてみる。取り上げた内容は完全に独断と偏見です。 関連記事: Vimスクリプト基礎文法最速マスター - 永遠に未完成 この記事では vimrc を書くにあたって知っておくべき概念や機能を解説します。Vim 自体の操作方法に関しては触れません。 基礎 バッファ バッファは、ファイルを編集するための論理的な領域です。Vim で新しくファイルを開くと、新しいバッファが作成されてそこにファイルの内容が読み込まれます。 ウィンドウ ウィンドウはバッファを画面に表示するための物理的な領域です。分割することができ、1つの画面に複数のウィンドウを表示できます。 タブページ タブページを使うことでウィンドウの配置を保持したまま複数の画面を切り替えることができます。 タブ文字と区別するためか、タブページと呼ばれています。 モード Vim の中でも知って

    vimrc基礎文法最速マスター - 永遠に未完成
  • ref.vim 書いた - 永遠に未完成

    ref.vim なるVimで様々な言語のリファレンスを見るためのプラグインを作った。 Vim で各種言語のリファレンスを見るプラグインはすでに色々あるけど、それぞれ独立しているので操作性とかその他もろもろ統一されてなくて嫌になったので作った。 公開したのはいいけど全然作りかけです。とりあえず最低限動く感じ。 2009/08/11 追記: 肝心の公開リポジトリのURL貼るの忘れてましたorz ごめんなさい。 http://github.com/thinca/vim-ref/tree/master 現状の対応リファレンス refe (Ruby) phpmanual (PHP) あらかじめマニュアルをDLして解凍してそのパスを g:ref_phpmanual_path に設定する必要がある。 簡単な使い方 :Ref コマンド 唯一のコマンド :Ref が定義されているので、これを使います。 :R

    ref.vim 書いた - 永遠に未完成
  • 1