サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
Pixel 9
whileimautomaton.net
自己紹介 kana (aka @kana1 or id:ka-nacht) http://whileimautomaton.net/ トゥルーVim使い Vim歴 2000年 elvisに出会う / 3日で挫折 2001年 jvimに出会う 2002年 Vimに移行 2007年 Vimを極めようと決意 2008年 トゥルーVim使いに転職
Previously, I introduced how to “Use Travis CI for Vim plugin development”. CI requires well-developed test suites to achieve advantages. But I did not describe much about how to write unit tests for Vim plugin development in the article. If you try to write unit tests for a Vim plugin, you will be faced with problems like the following: Run a Vim process without any customization to reproduce sam
(Update: 2018-02-27T01:22:51+09:00: Added about .gitignore, updated Gemfile to install recent version, and updated .travis.yml to use new version of Vim.) Travis CI provides a hosted continuous integration (CI) service for the open source community. It is integrated with GitHub and supports various languages. Since Travis CI is flexible, it is not difficult to use Travis CI for projects written in
Vimで任意の名前のバッファを作成する方法: hide enew – 無名のバッファを作る。 setlocal noswapfile – スワップファイルを使わないように設定する。 file `='set name as you like'` – バッファの名前を設定する。ワイルドカード等の問題を回避するため、変数か文字列を`=...`経由で渡すとよい。 作成するバッファがスワップファイル不要かつ分かり易さのために任意の名前を付けたい場合 (例えばプラグイン等で一時的な情報を提供するため) に使います。スワップファイルはバッファ名をベースとした名前で作成されるため、バッファ名にワイルドカード等が含まれていると警告 (E303) が表示されます。自動処理したい場面で一部の種類の警告が発生すると確認のプロンプトが表示されるため、困ったことになります。 今日はこれだけのためにかなり時間を食われま
What is the difference between HINSTANCE and HMODULE? Windows 関連のプログラミングにて、今一 HINSTANCE と HMODULE の違いが解らなかった (同一視できる場合が多い気がしていた) のですが、ようやく答えが見つかりました。今まで MSDN だけを調べていて、それらしい記述が見当たらなくて途方に暮れていたのですが、MSDN 以外を調べてみたら実にあっさりと見つかって拍子抜けしてしまいました。 要は HINSTANCE と HMODULE は 16-bit Windows 時代の名残で、現在では両者に違いはないそうです。 「What is the difference between HINSTANCE and HMODULE?」適当訳 現在では両者は同じものですが、ある時代では全く異なるものでした。 それは 16-b
I released vim-flavor, a tool to manage your favorite Vim plugins. See the README for typical usage. I know that there are several implementations for the same purpose and many users love them, but all of them do not meet my taste. That’s why I wrote vim-flavor. The philosofy on vim-flavor is as follows: Whole configuration including versions of plugins should be under a version control system. Al
書けば書くほどVim Scriptのアレな点が気になってしょうがない。Vim scriptは基本的にCommand-line modeで入力するEx commandsをそのまま書き下しただけのもので、インタラクティブにちょちょっと使っているだけなら特に気にならないのですが、プログラミング言語として見るとかなりアレです。 Ex commandsをベースにしていることに由来する制限事項 基本的に1行につき1コマンドしか記述できない。 一応、各コマンドを|で区切ることで1行に複数のコマンドを記述することができるが、コマンドによっては|を引数として解釈するために後続に複数のコマンドを記述できない場合がある。その一貫性のなさ。 1コマンドが複数行に渡る場合、必ず行継続の記号\を書かなければならない。しかも\は後続の行頭に書かなければならず、他のほとんどの言語のスタイル(行末に特定の記号を記述するか、
I often read Git diff output in Vim to review patches etc. While reading a diff output, I often open files listed in the diff output to check more code around changed lines. Vim has a great command for this situation. It is gf. gf opens the file whose name is under the cursor. Since any diff output contains paths of changed files, all I have to do is to move the cursor to a path then type gf. Thou
Git is one of the best version control systems at present. One of the important features of Git is that it provides some way to undo most operations. In practice, we often mistake something, but Git provides way to undo such mistakings without any loss. This is a great merit. Though Git’s commands are incredibly useful, it’s hard for newcomers to make a good combination of Git’s commands to finish
Vimの関数呼び出しでは場合によって<SID>とs:を使い分けする必要があるが、実はどのケースであっても<SID>を使えば動くには動く。ただ<SID>というプレフィックスはs:に比べて見辛いため、できればs:を使いたい。ではどの場合にどちらを使うべきか。答えは以下の通り: s: :autocmd、:command、:function/:endfunctionの中で使う(推奨 - <SID>でも動くには動く)。 <SID> :map系か:menu系コマンドの中でのみ使う(必須 - s:では動かない)。 Vimのカスタマイズに手を出し始めた頃は何故このような使い分けが必要なのか分からなかったが、今、この記事を書いていて思い付いた。:map及び:menuの定義時に与えられた{rhs}だけでは、その中に出現するs:の意味・用途を正確に判定することができないからだ。例えば以下のような定義があったとし
On Sun, 21 Nov 2010 04:58:17 +0900, **** **** <****@************> wrote: > I am trying to figure out how to customize the textobj-entire plugin. > The default mappings are for `ie` and `ae` to select the entire > document. I would like to use `ia` and `aa` instead. Short answer Put the following lines in your vimrc: xmap aa <Plug>(textobj-entire-a) omap aa <Plug>(textobj-entire-a) xmap ia <Plug>(t
AsciiDoc documents can be converted into various formats, especially HTML family. And it’s possible to colorize source code embedded in an AsciiDoc document. AsciiDoc uses GNU Source-highlight (by default) or Pygments to colorize source code. Though both filters support many languages/formats, it’s not enough. For example, AsciiDoc format is not supported by both filters. So that I tried using Vim
問題 gitにはadd、blame、commitなどの標準のサブコマンド以外にも独自のサブコマンドを定義できます(正確にはこの機能の名称はaliasですし、本来はそういう用途で導入されたものだとも思うのですが、私としてはこの説明の方がしっくりくるので以降ではaliasとは呼びません)。標準サブコマンドに対する単純なエイリアスを定義したり、単に外部コマンドを実行するだけのものなら何も問題はありません。 しかし、ちょっと複雑なものを定義しようとすると話は少々面倒になってきます。処理自体をスクリプトとして分離してそれを実行するだけのサブコマンドを定義するのも一つの方法なのですが、gitのサブコマンドとして定義するようなケースではスクリプトを分離するほどの規模でない場合が多く、もし分離するとなると管理対象のファイルが増えるため面倒です。できるだけ単一の設定ファイル(~/.gitconfig)に定義
Vimを使いこなす上で避けて通れないのがkey mappingです。Vimのデフォルトのキーバインドはそれ自体でもそれなりに優秀なのですが、キーの割り当て方が今一だったり、そもそもキーが割り当てられていない機能も多くあります。それをカスタマイズするための機能がkey mappingです。 Key mapping (あるいは単にmappingやmapとも呼ぶ)については:help map.txtを読めば一通りのことは分かるのですが、どういう風に使うべきかという観点からは詳しく説明されていませんし、掲載されているサンプルも実践という観点からは今一です。そこで、基本的なところから始めて、よくあるパターンや使い分けの仕方、そしてハマりがちな落とし穴について述べていきたいと思います。 基本 Key mappingを定義するコマンドは多数ありますが、基本的な書式は以下の通りです: map [...]
なにかと誤解が非常に多いVimのfiletype pluginについての解説。VimM#2でfiletype pluginについてスルーしたのは、以下の分量から察してください。 概要 Vimはバッファ毎にその内容の種類、例えばPerl/Python/Rubyスクリプトといった情報が保持されており、それは'filetype'というオプションで表される。Filetype pluginとは'filetype'に応じた機能を提供するためのスクリプトである。その性質上、提供される機能はバッファローカルである。 Vimは標準で多数のfiletype pluginが同梱されている。どのようなものがあるかはVim内で:edit $VIMRUNTIME/ftplugin/を実行してみれば分かる。:help ft-filetype-pluginで'filetype'に対するfiletype pluginのドキ
つまり、ローカルな値を設定するときは:setlocalを使うべきです。そうしないと新たなバッファやウィンドウを開いたときに予期しない値が設定されることになります 例えば特定のバッファのタブ幅を変えようとしてset tabstop=20とした場合、新たなバッファを開いたときのタブ幅のデフォルトは20になります。これでは元に戻すためにset tabstop&としなければなりません。実際、私がVimを使い始めた頃はこの挙動でかなり混乱させられました。自分でインタラクティブに設定した分には許せるのですが、プラグイン等で似たようなことをされるとかなりアレです。 なお、ローカルな値を持つオプションの一部には「普段はグローバルなオプションとして振舞う。ローカルな値が設定されればそちらを使う」という派生系が存在します(:help global-local参照。ヘルプには「global or local t
なかなか興味深い。考えてみればゲーム機はハードの制限が結構厳しいし。ゲーム屋じゃないとなかなか気付けないな。 後、やはりインターポジショニングは微妙なライン、というところか。 139 名前: デフォルトの名無しさん 投稿日: 2001/02/23(金) 23:26 ゲーム機のプログラムではmalloc使うと怒られます。 153 名前: 虹 投稿日: 2001/02/25(日) 03:28 ヒープ(malloc)でのメモリ確保だと、malloc/freeする順番により 隙間ができたりするのでデバッグが大変だと思うのですが。 ゲーム開発で使うなんて信じられん。 154 名前: デフォルトの名無しさん 投稿日: 2001/02/25(日) 05:20 mallocというか、ヒープはつかうでしょ、普通。 虫食いは確かに困るけど、そのへんは気をつけて組むし。 ヒープ禁止して異様なプログラムスタイルに
Today I wrote chat.vim-users.jp-log-converter, a text-to-html converter for logs of chat.vim-users.jp (sample output). I wrote it as a Ruby script, but it’s a bit hard for me. Because I almost forgot how to program with Ruby. For example: How do I write a Hash literal? Thanks to ujihisa for a great help to write it. Vim plugin ku 0.2.4 has been released. This version includes a bugfix, a minor imp
smartword 0.0.2をリリースしました。重度のVim hackerな方からのプレッシャーを感じたため久々にコードを見直したところ、非常に残念なコードを書いていたことに気付いたため、バグ修正やリファクタリングなどを行いました。機能的には変化ありません。 smartword が便利 - ns9log 日本語の移動の規則がよくわからない Vimのword/WORD単位の移動は分かち書き言語を前提としているので、日本語などの言語における単語単位での移動はできません(実行時に形態素解析でもすれば別ですが、現状ではそういうことは考慮されていません。最近、vim_devでその手の話題がありましたが、あまり盛り上がってはいませんね: word segmentation in Vim - vim_dev | Google Groups)。 その上で、日本語を含むテキストにおけるword単位の移動は
初心者時代に一度は遭遇するトラブル(1) ワーキングディレクトリを元の状態に戻す方法は? コマンド名からgit resetとgit revertがそれっぽいな Subversionだとrevertだったしgit revertかな うーん、つまりこういうことだな? $ git revert HEAD fatal: Dirty index: cannot revert 何が何だか わからない 初心者時代に一度は遭遇するトラブル(2) じゃあgit resetを試そう うーん、つまりこういうことだな? OK、成功だ$ git reset --hard HEAD へー、こうすればさらに1つ前の状態に戻せるのか $ git reset --hard HEAD~1 あれ、git logしたら最後にしたコミットが消えてる 何が何だか わからない 初心者時代に一度は遭遇するトラブル(3) 大体revert
タブの便利な所 バッファを保存しなくても切りかえられるところ. Vimのtabpageは他のアプリケーションで言うところの「タブ」と次の点で異なります。Vimでは(大抵は)ファイルを編集するための領域としてbufferがあり、bufferを表示する領域としてwindowがあり、1つ以上のwindowを表示する領域としてtabpageがあります。「タブ」として使うのであれば:set hiddenした上でbufferを切り替えても同じことです('tabline'の有無はありますが、それはどうとでもできる程度の話)。 「タブ」風に使うのは、それはそれで一つのスタイルなので構わないのですが、1つのtabpage内で複数のwindowを扱えるという点を活かさないと勿体無いと思います。 Twitterでのひょんな会話の流れからGitM#1なるイベントが企画されたので、それに参加しgitについて自らの分
How Vim user grows Lv0. who doesn't know about Vim Lv1. who knows basic usage of Vim Lv2. who knows Visual mode Lv3. who knows various motions Lv4. who doesn't use Visual mode How Vim user grows - Lv0 Lv0. who doesn't know about Vim Lv1. who knows basic usage of Vim Lv2. who knows Visual mode Lv3. who knows various motions Lv4. who doesn't use Visual mode You already know what Vim is, eh? How Vim
予定 プラグインとは何か プラグインの種類 プラグインのファイル構成 プラグインのインストール方法 プラグインの使い方 プラグインの探し方 まとめ
テーマ Hello Worldを表示するだけの簡単なプラグイン Hello World自体は簡単 本題はUIの提供方法とプラグイン固有の事情 実用的なものはこれからの皆さんに期待 予定 プラグインのファイル構成 ドキュメントを書く プラグインの雛形 関数の定義 Exコマンドの定義 Key mappingsの定義 autocmdの定義 その他いろいろ まとめ プラグインのファイル構成 (ふつうの)最小構成は以下の通り: doc/hello.txt ドキュメント :helpで読める plugin/hello.vim プラグイン本体 中身はVim scriptの羅列 詳細: :help 'runtimepath'
altftsys - alternative filetype scripts loader (2008-09-28 pending) transpose - transpose 2 text objects patch: maparg() cannot distinct global mappings and buffer-local mappings, it’s impossible to temporarily override some key mapping (more precisely, to restore temporarily overridden key mapping.) patch: glob() and globpath() with a {foo,bar,baz} pattern show unexpected hit-enter prompt in wind
最近はHaskellについて勉強したりしていなかったりするのですが、Haskellで実用的なコードを書くにあたってはどうしてもmonadを利用しなければなりません。とはいえ、monadの振舞いさえ把握すれば良く、monadそのものについての意味は把握する必要はありません。その点については青木本にも書かれていましたし、先日お会いしたujihisaさんにも言われました。 確かにその通りなのですが、私の場合、はぐらかされたmonadそのものについての詳細が気になって気になって仕方がない質で、そこで詰まって一向にHaskellの勉強が進みません。いや、一応はスルーして進めてはいるものの、どうしても気になって仕方がありません。最近あった類似する問題としては、gitの下位レベルの仕組みなどが挙げられます。gitの方は公式のドキュメントを読めばすぐに理解できるので良かったのですが、monadの方は難易度
VimM#2を開催します。今回はテーマを「Vimプラグイン特集」とし、プラグインとは何か、便利なプラグインの紹介、プラグインの書き方について発表・解説を行う予定です。便利なプラグインの紹介についてはスピーカーを募集中です。それ以外については私が発表・解説する予定です。 今回のテーマはid:taku-oさんの「vimプラグインの作り方を知りたい需要があると、発表やってて感じた」「どうやら便利なプラグインの話とか聞きたかった人もいたようだ」という発言から決めてみました。ある程度の方向性を決めておいた方が、発表にもやることにもまとまりができて良いのではないかと思ったので、この形を提案してみました。 VimM#3以降を開催する際も何らかのテーマがあれば良いと思います。案としては、id:maedanaさんの意見にあるような、初級者から中級者へのステップアップ講座などが考えられますね。 Vimを使いこ
次のページ
このページを最初にブックマークしてみませんか?
『while (“im automaton”);』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く