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

VimGolf 解説: 汎用なマクロ

$
0
0

VimGolfとは

簡単に言うとショートコーディング、コードゴルフのVim版。実行結果でなく Start, Goal のテキストが与えられて、どれだけ短いキーストローク数で変更できるかを競う。
サイト: https://www.vimgolf.com/

過去の解説など https://qiita.com/tags/VimGolf解説


解説する問題はこれです
https://vimgolf.com/challenges/524e1a20b81fe50002000008

start
attr_reader :align, :variables, :with
attr_accessor :spaces, :to, :complete, :challenge
# vim: set expandtab:
goal
attr_reader :align,
            :variables,
            :with
attr_accessor :spaces,
              :to,
              :complete,
              :challenge
# vim: set expandtab:

興味ある方は是非、下の解説を見ずに挑戦してみてください。


以下解説


解答(現状最短解)

19 ストローク
qq/,<CR>a<CR><Tab><Esc>Bjdwq4@qZZ

解説

この19文字に詰まっているテクニックを解説する。

qq

  • q{0-9a-zA-Z"}: Record typed characters into register {0-9a-zA-Z"}

2ストローク目にタイプされた "q" のレジスタに記録。次に q が押されるまでにタイプした文字をマクロとして記録するので、
/,<CR>a<CR><Tab><Esc>Bjdwこの11文字が入る。

/,<CR>

  • /{pattern}[/] Search forward for the

,という文字列を検索、そこまで移動。

a<CR><Tab><Esc>

  • a: カーソル後に挿入モード。

<CR><Tab>を入力した編集後はこうなる。

attr_reader :align,
               |:variables, :with
attr_accessor :spaces, :to, :complete, :challenge
# vim: set expandtab:# vim: set expandtab:

|はカーソル位置

Bjdw

  • B: [count] words backward. |exclusive| motion.
  • dw: delete word.

手前のWORD(非空白文字)の先頭まで飛びます。→ 下の行に移動。 → 次の文字まで空白削除。

attr_reader :align,
            :variables, :with
attr_accessor :spaces, :to, :complete, :challenge
# vim: set expandtab:# vim: set expandtab:

|はカーソル位置

4@q

  • @{0-9a-z".=*+}: Execute the contents of register {0-9a-z".=*+} [count] times

qに登録したマクロを 4回実行する。

ここで全て連続してマクロを呼び出せるようになっているところがポイント :thumbsup:

  • ,までの移動 /,<CR>
    • f,だと2行目の編集がうまくいかない。
  • インデント整形 <Tab>Bjdw
    • スペース4つ挿入 だと2行目のインデントが崩れる。

ZZ

保存して終了。

終わり

VimGolf は小さなテクニックの発見が多くてよいです。一時的なテキスト一括編集もよく行うので僕はマクロを重宝してます。


Vimのヤンク&ペースト

$
0
0

Vimで記述したコードをwebで提出する時などにペーストできず四苦八苦したのでここでまとめておく. Vimの中でペーストするだけなら簡単だが他のものにペーストするときには予め一手間おいておく必要がある.

本題はペーストの項にあるのでお急ぎの方はそちらへどうぞ.

悪い例(Terminalに覚えさせる)

範囲をマウスで指定してctrl + shift + cすればターミナルからクリップボードに"コピー"できる.でもマウスを使うなんてCUIやキーボードがベースのVimっぽくないし,Vim自体からクリップボードに覚えさせているわけではない. なによりイケてない.

どうせならVimの力だけで済ませたいというのがVimmerのロマンだ.

範囲選択

コマンド動作
vビジュアルモードに移行
(vモード) h,j,k,l範囲選択
(vモード) Gカーソル行から最後まで選択
(vモード) ggカーソル行から最初まで選択
ggvG全選択

ヤンク(コピー)

コマンド動作
ddカーソルのある行をカット
nddカーソルのある行を含め下にn行カット
yyカーソルのある行をヤンク
nyyカーソルのある行を含め下にn行ヤンク
yvで選択した範囲をヤンク
エディタ動作
:n,m yn行目からm行目までヤンク
:%y全体ヤンク

ペースト

コマンド動作
pヤンクした範囲をペースト(カーソルの下の行)
npヤンクした範囲をnつペースト
Pヤンクした範囲をペースト(カレント行)

ちなみにこのとき任意の場所でない箇所でインデントされてしまうのを防ぐために, エディタモードで:a!を打ち込んでからpでペーストし, excキーを打てば希望通りの文章をペーストできる.

ここからが本題だ.

クリップボードとVim

クリップボードが使えるか

クリップボードを使わないとコピー&ペーストはできない. だがVimがクリップボードを使えない可能性がある. 自分のVimはどうなのか調べてみよう.

$ vim --version | grep "clipboard"

このとき一番最初に出てきたのが-clipboardだった同志はvim-gtk, もしくはvim-gtk3をインストールしよう. これはGUIバージョンのVim, gVimが付属したVimである. だがgVimを使う必要はない. インストールすると通常のVimでも+clipboardに, つまりクリップボードを使えるようになる.

$ sudo apt-get install vim-gtk

なお上の結果が最初から+clipboardだった人はおそらく残念なMacユーザかと思われるが, いずれにせよこの作業は必要ない.

Vimにクリップボードを使わせる

.vimrcというファイルをご存知なら, そこに次の一行を加えよう.

.vimrc
setclipboard=unnamed,autoselect

もしご存知でなかったら, これはいい機会だ. 自分のホームディレクトリに .vimrcというファイルを作成し, 上の文を加えよう. vimはカスタマイズ性に優れたテキストエディタであり, このファイルはそれを実現してくれるファイルだ. 是非 .vimrcをいじって自分だけのvimを手に入れよう.

ペースト先によって異なるペースト方法

Vimにペーストするならコマンドモードからpだが, 他のエディタやwebページなどにペーストするならctrl + vでペーストする.

よいVim Lifeを!

参考にしたサイト

「vim」の種類 - http://zorinos.seesaa.net/article/451348076.html←是非見に行くと良いと思います.

vimconf2017へ行ってきました

$
0
0

vimvconf 2017

というわけで、vimconf 2017へ行ってきました。
個人的には、具体的に最新な技術情報を含むと考えるので、Qiitaにてアップします。
とりあえず、楽しかった。

私は関西(兵庫)から参加してきました。初参加。
割と関西に限らず、関東の外からの参加者の方も多くいらっしゃいました。
...Osaka vimな人もいた模様(マリオアイコンな人をはじめ、幾人かお声かけさせて頂きました, 私は単に過去の一参加者です。)

なお、今回から同時通訳がされるようになったそうです(JP->EN, EN->JP)。
より国際的カンファレンスの色を強めたということでしょうか。

さて、前置きはさておき、以下カンファレンスのサマリとなります。
筆者のリアルタイムな議事録が唯一のソースなので、内容には謝りがあるかもしれません。
ご了承ください(sessionのタイトルも、その場でメモしたもので、正確である保証はありません)。
また、メモの仕方の都合上、あまりサマライズできませんでしたが、適宜読み飛ばしながらご覧ください。

key speakers

key speakersは、以下の方々と事前に発表されていました。
そうそうたるメンバ。

  • haya14busa
  • Fatih
  • mattn
  • k_takata

AM(午前のsession)

開会

  • 開会の挨拶が英語(後の司会は全て英語だった)
  • 一般社団法人VimConf準備会が主催
  • 注意事項
    • トークセッション中は撮影禁止
  • 終わったらvimconfのブログかいてね(だから書きました)

haya14busa, -Vim, Me and Community-

  • vim incsearch の author
  • 今年の4月からGoogleな人

  • Vimと自分について

    • 2012からプログラミング開始
    • 大学のころが始まり
    • 最初はブログとかwebとか
    • vim tutorからはじめた
    • 使い始めた理由
    • かっこいい!
    • 高速で効率的に編集できる
  • Vimの活動について

    • "EasyMotion"
    • plugin -> https://github.com/easymotion/vim-easymotion
    • haya14busaさんがforkして拡張した
    • パターンにマッチしたキャラクタをラベルに置き換えて、それを頼りにカーソルを移動する
    • 最初に開発されてから、元のauthorがあまり更新しなくなったので、forkして、改善や、バグフィックスを行った
    • その最中、元のauthorからコラボレータとして開発してくれないかと以来された
    • 現在githubで約3.5k star
    • プログラム経験1年未満だったので、色々わからなかったが、小さなものから積み上げていった
    • マルチバイトに対して、ローマ字でマッチするような機能が入ったりした(別のpluginの機能を参考に)
    • 競合/参考plugin
    • vim-sneaks, clever-f, incsearch.vim, vital-over, vim-over, vim-smalls
    • ver3で革命的な出来事が(Jump to other windowをサポートするあたり)
    • 今までは、バッファの文字列を書き換えていた
    • ので、コンフリクトによって実現できなかった
    • 擬似的にバッファを書き換える機能がvimに入って、それを利用した
    • その中で、vimのバグを発見して、vimにpatchを送った(Ozaki kiichi氏の協力を得て)
    • "incsearch.vim"
    • plugin -> https://github.com/haya14busa/incsearch.vim
    • インクリメンタルサーチ
    • 検索中にカーソルを移動する
    • いっぱい"n"を押してnextするのはめんどくさいので、次のスクロール箇所へジャンプする機能
    • うまく他のpluginのソースコードを参考に実装をしている
    • ジャンプ先のカーソル位置をオフセットする機能を入れた(/+3, みたいな入力)
    • ユーザが拡張できるようなAPIを提供した
    • "PowerAssert"
    • jsであったライブラリを、vim-scriptで再現した
    • vim-scriptでvim-scriptをparseするものがあったので利用した
    • "vim-operation***"
    • 一瞬ハイライトする(詳しくは聞き逃し)
    • "Re-vital.vim"
    • ロードが遅いものを速くした
    • ロードするコードを書き換えた
    • この開発に関連して、ステータスラインが消えてしまうバグを発見した
    • ステータスラインを再表示する際のエラーにより、ステータスラインが消えてしまう
    • "go-vimlparser"
    • golang program
    • vim-vimだと遅すぎるので、golangで再実装した
    • オリジナルのauthorはpython, jsでparserを作っていたりした
    • vim-vimだと50sec -> go-vimでは0.3secになった
    • "reviewdog"
    • golintは直さなくてよいものまでこかす -> CIとかでかけると大変
    • 新しく出てきたwarningだけを表示する
    • goとvimの合いの子という感じ
    • vim8.0でlambdaが入った
    • "incsearch -> for Vim!!"
    • ついにVim本体に入った!(Patch 8.0.1238)
    • これをきっかけに、CmdlineEnter/CmdlineLeaveというイベントが入った(autocmdでたたけるやつ)
    • Vimのコミュニティの良さ
    • ダイバーシティがある
    • スパルタンなVimmerや、DarkPoweredな人がいたり.....ということ
    • いろんな言語、いろんな開発をやっている人がいる
    • "Vimはペイするエディタ!!(Googleに入れたよ)"

Fatih Arslan -The Past and Future of Vim-go-

  • DigitalOceanという会社の人
    • クラウドプロバイダ
  • from turkey(トルコ)
  • 思ったより若そうな方でした(でも子持ち)
  • Go本体のコントリビュータでもある(color, structs)

  • "まずGoの話 vim-goの歴史"

    • vim-goの最初のcommitは、googleの人が2009年にしたもの
    • 最初はハイライトなど表示がちょっとサポートされただけ
    • 2011に Import ImportAs Dropが追加された(初めてのコマンドたち)
    • そのあとすぐにGoFmtが入った
    • GoのオフィシャルのFmtを使う -> Goが成功した一つの要因
    • 2013 make が入った
    • 2014にGoのオフィシャルからはずされた、(Goに含まれるべきではないので)
    • misc/vimの最後のcommitでGo file detectなどが入った
    • "ここからvim pluginへ"
    • なぜvim-goが残ったか
    • 当時はたくさんのpluginが乱立していた
    • クリアなロードマップがなかった(なにをしていくべきか、などの情報がなかった)
    • Go本体に含まれたいたvim-goもドキュメントない、ハードコードされまくり、など、完成度が高くなかった
    • 完成への計画を開始した
    • Go本体のものをベースとして、すべてのpluginを統合して、、と計画を立てた
    • mattnからすぐissueがきた
    • 2014 最初のcommit(最初はgolang.vimという名前だった)
    • 次にgo.vimになったが、vim-go.vimとなった
    • ドキュメントがないのが問題だった
    • とりあえずvim-go.txtを追加した
    • でも気に入ってない(vim helpのsyntaxがキモいため)
    • markdownサポートして!
    • ユーザビリティの改善
    • GoInstallBinaries
    • 内側
    • バイナリを作るに関して、使う側がmakeするべきではない
    • GoCoverrageのdemo
    • いいよね~GoCoverage(個人の感想)
    • 2015!
    • v1.0をリリース(既に1000commit以上!)
    • windowsサポートなども入った
    • versioningのコンセプトを追加
    • ライセンスを追加
    • BSD 3-Clause license
    • linux distributionへ入れたかったので
    • GOPATHの自動検出も入った
    • GoMetaLinter, GoTestCompile, GoTestFuncなども入った
    • 2016
    • NeoVim入った年だよね
    • Asyncが入った
    • Gobuildで試してみたりした
    • Donation を Kindle -> Ptreonへ
    • 毎月vim-goで200ドル以上
    • Donationは躊躇するべきではない
    • 自分の自由な時間を使って価値を作り出しているのだから
    • Vim8.0 がでた
    • こちらもAsyncに対応
    • しかしそのバグに苦しまされた
    • よって、パッチが当たってるかを確認するようにした(vim-go内で)
    • vim-goはtoolによってパワフルに支えられる
    • vim-scriptで書いていたものを、Goで書き直した
    • 適宜JSONやvim-scriptを返した
    • vim-scriptのsystem()はシェルによって挙動がことなるので、うまくラップして使っている
    • GoのソースをparseするものがGoにあるのでありがたい(ASTを返してくれる)
    • GoAddTags json が gomodifytagsでjsonをstructから返してくれる
    • Demo Time for GoAddTags?
      • 関数の内側をオブジェクトとして選択する(コメントもふくまれるのがええ感じやろ 関数のコメントもその一部だから)
    • ASTベースだと色々な利点がある
      • これをvim-scriptでやると大変すぎる
    • ただ、ツールを使う場合は、OS間の互換性を考慮しなければならないのがデメリット
      • パスセパレータの問題がある
      • isMac, isWinなどで吸収
    • 競合がでてきた
    • 新しいロゴを作った
    • チュートリアルを作った
    • とりあえずやってみて、という提案
    • これをきかっけにVimを使い始めた、という人もいた
    • syntax baseなfoldingをサポート
    • 2017
    • Travis CIをサポートした
    • vimhelplint
    • vim-goはGoogle Source Awardをget!
    • most used editor for Go!!
    • 今はいろんなコントリビュータがいる
    • 現在は7000start
    • Future
    • debug
    • 問題はdebug APIがない
    • mattnが動きはじめた
    • debugはmattnに言って
    • 悪かったとこ
    • README.mdとhelpが一致していないところがあった
    • Vim - NeoVim間の違いがあって問題がでてくる
    • better UI is needed for better UX
    • よかったこと
    • Go toolがよかったのではかどった
    • userの声を聞いている

lunch time

  • 人形町のすき焼き弁当
    • 豪華(容器が木製の桶)
    • 関西人でも好きな味
  • 白い恋人 from Hokkaido ?

  • Fatih x mattnが初の対面を果たす歴史的瞬間が...

  • mattn x Koron x k_takata は壇上で昼食+質問タイム

  • Osaka.vimへmattnさんを誘う(マリオアイコンの人)

    • mattnさんは家庭があるのでお忙しい模様
    • というわけで、mattnさんにきてもらえるように、次回のOsaka vimは平日開催を計画している模様(LT中心で)

pm

mattn, Koron, k_takata トークセッション (Round Table Discussion)

  • vim-jpな人たちはneovimはあまり知らない模様

  • speaker

    • k_takata
    • rubyの正規表現エンジンのメンテナ
    • vimに300commit
  • vim-8

    • terminal normal modeが入ってるけど賛否両論(m)
    • neovimの方がその点は評判がよい(m)
  • vimを使い始めたきっかけ

    • mattn
    • vim2.0から
    • J-Vimとかあった
    • その頃は1ユーザ
    • J-vimの内容がオフィシャルに入らないので、Koronとpatchを送りまくった
    • 開発に携わるきっかけは、Windowsで使いやすくしたかった(IME関連)
    • takata
    • vim5.0から
    • それ以降はあんまし使ってなくて、6年前からまた使い初めた
    • Gitのコミットメッセージでvimが起動するので、がきっかけ
    • 2012頃から使い始めて、その後すぐくらいにVim-jpができた
    • Koron
    • 卒論を書くときに使い始めた
    • 正規表現エンジンを日本語に対応さえるのに熱中していた
  • 最近追加された機能について

    • lambda
    • vim-scriptのsort, map, filterなりでめんどくさいが、でてきたので(m)
    • 自分でやり始めたけど、takataさんへ投げた(m)
    • terminal
    • vimのdesign notにあったけど、bramが「便利だね」と言い出した(m)
    • terminalがちゃんと動いたのは、windowsの方が先(m)
    • windowsだと、terminalは本当に便利
    • windowsのプロンプトは、複雑なことをしていて、ひどい目に会うことがある(k)
    • setbufline
    • vim scriptの関数
    • appendbuflineはない
    • incsearch
    • 急遽入れた(k)
    • 自分としては、commandlineenter/leaveはオプションを足した方が良いと思っている(m)
    • bramには却下された(t)
    • 数年後に突然入るかも(k)
    • 古いpatchを掘り起こすのがtakataさんはうまいよね(k)
  • 印象深いpatchランキング

    • "takata"
    • windows consoeが壊れる問題を直したやつ(t)
    • マルチバイト文字が入ると壊れる問題(t)
    • 元々Win32APIがいけてない(m)
    • patch送ってもTODOリストに入って数ヶ月放置(t)
    • vim上でvimを動かすとおかしくなる、というissueでようやく入った(m)
    • makeencoding
    • windowsのCコンパイラはSJISとかが帰ってきて化けるときが多々ある(t)
    • pythonx command
    • pythonxで2.0,3.0系を吸収した
    • "mattn"
    • Syntax Timeout
    • reload time
    • ハイライトサーチやマッチの話
    • ここ数ヶ月syntaxが消える、という話があった
    • みんなを巻き込んで直した
    • Improve Channels Speed on Windows
    • チャネル、Jobが入ったあと、Windowsでの表示がガクガクしておかしかった
    • 直したらめちゃくちゃスムーズに動くようになった
    • Fix treat of Input Method on UNIX
    • Koronの日本語化対応が現況?(k, ご本人曰く)
  • 最近きになるplugin

    • takataさんのminpack?が気になっている(k)
    • vim8から使えるようになったpack機能を使っている(t)
    • 自分自身はあまりpluginはつかわない(t)
    • language serverがきになる(m)
    • language server とは、typescript x vs codeとかが最初の、IDE作るためのプロトコル(k)
  • vim-jpについて

    • 勢いで作った(k)
    • patchを書いていた人を巻き込んだ(m)
    • ちゃんとしたpatchをvim/vimに出すために、vim-jpの中で議論する(m)
    • vim-jpがなかったら、patchを出してなかったと思う(t)
    • 日本側でレビューしてもらえるのはありがたい(k)
    • 英語は完璧ではないが、勢いが自分はあるともう(m)
    • ぜひvim-jpへpatchをどんどん送ってチャレンジして欲しい(k)
    • 最初は本体じゃなくて、ドキュメント、テストの修正もいいとおもう(k)
    • takataさんはvim/vimのメンバとなった(k)
    • issueを閉じる権限、ラベルを貼る権限がある(t)
    • bramがgithubにまだ慣れてないので、大変なこともある(m)
    • vim/vimのcreditに日本人が追加された
    • わいわいがやがややっているので、どんどん来て欲しい(m)
    • issue書いたら、vim-jpのメンバになる(k)
  • Goってどうよ?(唐突)

    • vim x Goな人は多い(m)
  • vim-devじゃなくて、vim-jpでやる理由

    • 日本語じゃなくて、英語で喋ると間違う(m)
    • 昔勘違いしてあやまったりした(m)
    • bramは「共通言語のC言語あるやん」とかいってた(m)
    • 日本人同士日本語で議論してから英語で出すべきと思う(m)
    • vim-jpは他の技術communityよりユルい(m)
    • issueにラーメン画像が貼り付けられたり(m)
    • よくこのpatchが入ったらこっちも入れるべきだろ、とか作戦を色々考える(m)
  • 初心者でも使えるお気に入りの技

    • 連番を作る方法をtwitterにあげる(m)
    • vimしらない人はおおお、となる(m)
    • スペルチェックはもっと使うべき(t)
    • ネイティブですら使うので(t)
    • 元々は日本語混合だと真っ赤だったのを直した(t)
  • 書いたけどダメだったpatch

    • 自分はあんまりない(t)
    • 粘り強く入れるようにしていくので(t)
    • 自分はたくさんある(m)
    • socketのpatchは最初はNGとなった(m)
  • Vim活してて嬉しかったこと

    • Vimを使い続けるだろう VScodeはVimの開発の参考にするために触っている(m)
    • VScodeが一番進化が早いので(m)
    • patchがとりこまれるのは嬉しい(t)
  • 妄想している将来的な機能

    • lsp(language server protocol)とかはやるべきと思っている(k)
    • syntaxを書く木にならないので、改善した方がいいと思っている(k)
    • direct Xにちゃんと対応できるようにしたい(t)
    • カラーでビールの絵文字だしたいよね(m)
    • 結構難しい(m)
  • 他のエディタの機能でVimに欲しいもの

    • 他のエディタあんまつかってない(t, k)
    • VScodeにあるのは入れたいかなあ(m)
    • 設定のリアルタイム反映とか(m)

cocopon -Creating Your Lovely Color Scheme-

  • cocopon

    • 半分エンジニア/半分デザイナ
    • vim pluginも作っている
    • color scheme大好き
  • jellybeans, hybridを使ってたけど、最終的には自分で作った

    • それがIceberg
    • 8時間はColor Schemeを見ている時間
  • color schemeとは?

    • syntax
    • syntax groupを作る
    • syntax fileで定義される
    • highlighting
    • syntaxに基づき、キャラクタの色を設定する
    • :hi でその情報を確認できる
  • どうやって作る?

    • ":hi! Normal guibg=#161821 guifg=#345408"みたいな文法
    • case iceberg
    • コンセプトを作る
    • 暗くて、青い感じ -> 氷山をイメージ -> iceberg
    • 先にコンセプトを作ると、それを元に考えていける
    • ハイライト範囲はNormal + EndOfBufferに分かれている
    • 代表的な色を決めよう
    • "hi link"で、グループのリンク構造を作っていく
    • 色を選ぶ際は、RGBではなくHSBなり直感的なカラーモデルがおすすめ
    • なぜカラーパレットを先に作る?
    • -> 色数が爆発するのを防ぐため
  • よりいい感じのcolor schemeを作るには?

    • positive featureを増やす
    • ファイルタイプごとの色を調整しよう
    • pgmnt.vim, colorswatch.vimがサポートしてくれる
    • カーソル位置のリンク情報を表示してくれる
    • negative featureを減らす
    • 256色環境に対応しよう
    • 警告色を考える
    • 一般的には赤がエラー色
    • 色覚を考える
    • すべての人が同じように見えているとは限らない
  • 偉大な先人をどこから探すか

    • vimcolors.com というものがある
    • でも、マニアとしては満足いかない
    • 数を眺めるのではなく、自分に最適なものを探したい
    • 作った(colorswatch.ch)
    • githubのスター数でソートできたりする
    • color schemeの機嫌を辿れる
    • モバイル対応済み
  • conclusion(まとめ)

    • define concept
    • remember concept
    • learn by 先人
    • ぜひ、作ってみよう!

t9md -the most ambisious vim emluator-

  • vim -> emacs -> vim -> atomな人

  • vim-mode-plus

    • ATOM向けのvim emulator plugin
  • understand editing in Vim

    • j が move downとなるのは?
    • jがkeystrokeとして入力されたら、MoveDownクラスにディスパッチする
    • operation stackというデータモデルで実装している
    • jだと、すぐに実行する, diwみたいなコマンドだと、stackをみて実行可能になるまで待つ
    • motion, textobject, operatorという3つに分けて考えている
    • Mutation = Operator + Target(Motion or Textobject)
  • demoするよ(時間の限り)

    • (ATOM上でvim modeのラップをどういう風に働いているかを実演する)
    • vim modeだけではなく、独自の便利な機能を実装している
    • edge motionというのがある(4ddとかむずいやん) -> これvimの機能でもあったらいいなあ、な雰囲気
    • (モダンかつ多機能な機能の連発で私の脳が考えることを放棄し始める)
    • (しかしすごいなあ)

SENOO, Ken -Vim and Compatiblity-

  • サングラス+ビジネススーツな人

  • updating

  • keeping

  • サイボウズLiveは2019-04にサポート終了

  • POSIX原理主義

    • POSIXism
    • good
    • maintenance free
    • Bad
  • twitter is not posixism

  • ed -> ex -> vi -> vim

  • (vimの歴史や、機能を紹介)

    • has(), exits()とか
  • vimのencodingの話

    • set bomb

Shougo -Neosnippet.vim + Deoppet.nvim-

  • vimでexeをビットマップ表示で見る機能を作った(おまけ)

  • 自己紹介

    • 暗黒美無王(Uncock Vim Awe??w)
    • The text editor is the world
    • アイコンはzebraではない! -> ドラゴン
  • The dark powered plugins

    • dein.vim
    • denite.nvim
    • deoplete.nvim
    • defx.nvim(ファイラー, 開発中 vaporware)
  • The snippet plugins

    • スニペットトリガを展開する
    • Ex: if -> if () {}
    • neosnippet.vim
    • マーカタイプ
    • snipMate
    • 類似のplugin
    • 古いので、開発速度は落ち込んでいる
    • マーカタイプではない
    • UltiSnips
    • 海外ではよく使われている
    • 多機能
    • マーカタイプ?
    • バッファを書き換えて(次の場所にマーカを埋め込んでジャンプする)
    • 実装しやすい
    • パフォーマンスの問題がない
    • マーカなし
    • バッファから直接場所を取得する
    • 前のマーク場所に戻る、みたいな機能は実装しやすい
  • Neosnippet.vim

    • どのような思想なのかを伝えたい
    • なぜスニペットプラグインが使われているかわからないので作ってみた
    • 補完pluginにスニペットを突っ込んだ
    • が、大きいので分離した
    • ユーザカスタマイズができるようにneosnippet-snippetsを分離した
    • 問題点
    • マーカを埋め込んでいるが、見えなくしていて(consealで)、他のpluginと競合している
    • jump backは諦めた
    • バッファを変更してしまうという副作用がある(時々)
    • parseが遅い
    • なので、Deopeet.nvimを構想して、実装中
  • deoppet.nvim(nvim only)

    • これまでのスニペットがそのまま使えるようにする
    • nvimのExtended Marksを利用する
    • Python3 based
    • まだ300行程度
    • Extended Marks(neovim)
    • vimのマーク昨日の発展系
    • demo
    • (なんとなく動く感じのdemo)
  • おまけ

    • neocomplete.vim
    • 開発終了
    • deoplete.nvimがVim8に対応したので
    • 実装上、プロセス間通信をしまくるので、Windows上では遅い(補完候補の表示に1sec~2secかかる)

daisuzu -How ordinary vim user contribute to vim-

  • plugin author
  • Software Designに寄稿
  • Vimにpatch送る
  • Vim暦10年
  • Cは学生レベル

  • VimにContributeするには

    • sourceがカオス
    • 機会が壁
    • all you need is a great pasion
  • patchどう送ってきたのか

    • episode
    • 辞書ファイルのパスを指定できないissue
    • 正規表現のパスチェックを強化
    • ある朝VimをBuildしたときに気づいた
    • vim2016を聞いて、patchを送ろうと思った
    • 辞書補完はあまりつかわれていないイメージだったので、自分がやらなきゃという感じだった
    • テストを追加したbranchを作成
    • vim-devへ直接送った(テストのみ)
    • 翌朝にはmergeされていた
    • シソーラス補完(辞書補完の仲間)のファイルパスチェックが入っていなかったissue
    • 忘れられてるんだろうな、ということでpatchを送ることにした
    • GitHubへPRを送った
    • インサートモードの候補がなかなか出てこなくなる
    • ファイルorバッファから探すが、不要なwait処理が走っているのが原因
    • 気づいた同僚をcontributerに仕立てた
    • 進捗なしで3ヶ月経過
    • 結果的に自分でpatchを送ることに
    • 原因箇所の特定が難しかった
    • patchを作ったものの、正しい修正か自身がなかった
    • vim-jpへhelpしてもらって、patchを送ることができた
  • BugFixは比較的取り込みやすい

    • 毎日buildしてたら、気づく
  • Technic

    • debug
    • gdb
    • 対象の行が何回実行されたか
    • break + ignoreで見れる
    • Testing
    • make test
    • makefileを直して、vim scriptでテストを書いていく
  • Conclusion

    • とりあえずpatchを書いてみる
    • 毎日Vimをbuildする、とか

Pocke -The new syntax highlighter for vim-

  • plugin author

    • sushi-barが有名
  • syntax highlighter

    • Vimには長いファイルを読み込んだ時に、ハイライトを途中でキャンセルする機能がある
    • c max columnを設定しておくと設定できる
    • Vimはキーワード/正規表現を使ってhighlightする
    • なんでも正規表現で解決しようとすると問題にぶつかる
    • 「人類に正規表現は早すぎる」
    • うまくハイライトできないようなものがある(例えばruby)
    • SideCI
    • コードレビューを自動化するシステム
  • new syntax highlighter

    • Iro.vim(いろびむ)
    • 限界なしに、完璧に行える
    • 正規表現をつかわない、理解しやすいコード
    • rubyで起きる問題もおきない
    • matchaddpos()という関数を使っている
    • (demo, ruby hello, worldで)
    • tokenize + parse
    • iro.vimはrubyでほとんど実装している
    • High Performance?
    • 悪い知らせ
    • 1万行を超えるファイル(rubyソースファイル)を読むと死ぬ(固まる)
    • 良い知らせ
    • parseはボトルネックにはなっていない
    • matchaddpos()を大量に発行しているとbusyになるらしい

Alisue -You're been Super Vimman. gina.vim-

  • For or not For

  • Vimmer

  • Viman

  • Super Viman

  • Super Viman 2

    • CLI commands to Vim commands
  • Super Viman 3

  • Super Viman God

    • all native app to vim ...
  • Gine.vim

    • General purpose git plugin
    • like fugitive
    • Gina add %(current buffer)
  • Human forget things

    • What was discussed in a meeting
  • Gina's solution

    • 覚えておく必要がない(いろんなことを)
    • Quickly stage/un-stage files
    • visual modeが使える?
    • Git add -pがインタラクティブにVim上で行える
    • Git blame的なものをする(too much infomationなので、summary + Dateのみ)
  • すごいVimmer募集中

    • fixpoint

懇親会

  • 食べ物が豪華(ホテルビュッフェのクオリティ)
  • 飛び入りLTが4sessionほど(vim scriptにmonadみたいな話もあって面白かった)

  • 個人的にはFatihさんに「vimとvim-goでプロダクトコード作ってるよ、vim-go最高!」みたいに伝えれてよかった

    • 実際にものすごくお世話になってるし
  • シルバースポンサのMercari様から、Vim & まさかのemacs缶バッジの配布

    • Gジャンに両方つけた後、暑いから脱いだ時にemacsの缶バッジがインナまで貫通してて、インナがやぶけたあたり、「あ、やっぱり俺はVimmerだわ」と思うに至ったオチつき

振り返って

  • はるばる関西から初参加でしたが、必ず来年も行こうと思える内容でした
  • 最も好きなソフトウェアであるVimの、世界唯一のカンファレンスに参加できたことを誇りに思います

VimConf2017に行ったから感想文と今後の抱負書くわ

$
0
0

VimConf2017

はじめに

VimConf2017に参加してきました。最近東京に引っ越してきたので、今回が初参加となります。

本日はVimConf2017に参加後に合コン(Go Confarenceでない)に参加して、人生で最も幸せな日となりました。

とにかくプレゼンの内容が凄まじい濃度となっていて、それぞれの人の得意分野が十二分に生かされたとてつもないインプット量に、ただただ圧倒されました。

なので、酒が入った勢いで感想をつらつらと述べ、この刺激による inspire the next を忘れないうちにつらつら述べます。

発表内容

haya14busa/Vim, Me and Community

Vim, Me and Community

個人的には、今回のベストスピーカーだったと思います。1時間があっと言う間にすぎてhaya14busaさんのVimの旅と今に至る流れに、つい涙腺がゆるくなるほどでした。
特にVim8にincsearchのパッチが適用されるという話の流れには...酒がのみたい!

実際お話していても柔らかい物腰のすごくいい人だった。

来年は私もプラギンを作るやら、コントリビュートするなりして酒が進むネタを提供できたらと思います。

あ、本日のGo Confarenceも魅力的なプレゼン期待してます。

個人TODOとして次を上げておきます。

  • vim-easymotionの導入(NeoVimだからVim8に追加されたincsearch使えない。)
  • vim-asteriskの導入(自分のアスタリスクによる不満をこんなにスマートに解消できるプラグインがあったとは...)

fatih/The Past and Future of Vim-go

The Past and Future of Vim-go

GitHubスター数7000オーバーのプラグイン作者て、もうそれだけでやばいよね...

発表中のいきいきしたfatihさんを見ていると、本当にVimとGoに対する愛にあふれていることがよくわかって、ああVimに国境など無いのだなと思わせてくれました。
最近Goを書き始めた私としても、vim-goは非常にハードに使用しているプラグインのため、より深く知りたい魅力的なプラグインです。

今回Demoしてくれた内容の中でも新発見が多数あり、この一つのプラグインに私がまだ知らぬ機能がどれだけあるのだろうか...
vim-goを作ってくれて本当にありがとうございます。という感謝の気持ちでいっぱいです。

個人TODOとして次を上げておきます。

  • vim-go周りのまだ使っていない便利機能の調査、及び設定見直し
  • patreonで寄付

cocopon/Creating your lovely color scheme

Creating your lovely color scheme

純粋にスライドだけを見たとしたら今回最も素晴らしいものだったのでは無いでしょうか。

スタイリッシュかつ可読性を抑えた絶妙なスライドはもはや芸術の域だったと言えます。

その素晴らしいスライドからも、ひしひしとColor Schemeへの愛が伝わってきました。

お話しているときも、自分の作成したColor Schemeを見て、cocopon「なかなかイイかんじですね(ニッコリ)」といって見せたイケメンスマイルが印象的過ぎた。

普段適当に消費していたColor Schemeの奥深さやコンセプトを貫く大事さを教えてくれました。

そういえば自分の好きなColor SchemeであるJelly Beansやhybridを知ったのはcocoponさんの記事でした。ちなみに今はwombat256modが大好きです。

個人TODOとして次を上げておきます。

  • Color Scheme作る!

t9md/vim-mode-plus: The most ambitious vim emulator in the world

vim-mode-plus: The most ambitious vim emulator in the world

t9mdさんが作成されたvim-mode-plusは自分のAtomにも入っているのですが、ただのVim Keybindの再現プラグイン出なかったということを、恥ずかしながら今回初めて知りました。

標準のVimをリスペクトしつつもElectlonのビジュアル表現を活かした非常に機能的なFeedbackや、独自の編集拡張を見ると、自分のEditはまだ全然だということを思い知らせてくれました。

個人TODOとして次を上げておきます。

  • Vimの移動系キーバインドのおさらいをして発表で見た快適な編集を自分もできるようにする
  • テキストオブジェクトのおさらいをして更に編集速度を向上させる

生Vim(NeoVimだけども)使いとして負けてられないです。もっと効率的なEditを!!

senopen/Vim and Compatibility

Vim and Compatibility

POSIX原理主義者というなかなかヤクザなものをぶち込んでくれました。装いも相まってまじ怖い。

ですが後方互換製という普段めんどくさがってやりたがらない。けど非常に重要な事を思い出させてくれました。

自分もNeoVimだけじゃなくちゃんと後方互換製を保った.vimrcを書かなくては。

個人TODOとして次を上げておきます。

  • Vim8とVim7.4とNeovimで淀みなく動く.vimrcにする

ShougoMatsu/neosnippet.vim + deoppet.nvim

neosnippet.vim + deoppet.nvim

はいあー↑ん↓こっ↑く↓ゔぃー↑むお→う様ですね。あの厨二感あふれるアイコンは実は竜騎士(ドラゲナイ)らしいですよ。

私がNeoVim使いなのはこの人のプラグインを使うためなのです。はい。なので来年deoppet.nvimがリリースされる日をお待ちしております。ほんとに...

エキセントリックかつゆるーい感じの(どういう意味だよほんと)発表は、落ち着いて聞けてよかった。

なおdeopleteのVim8対応が正式にアナウンスされてました。Vim8用の設定、ほんとやっとかないと...

個人TODOとして次を上げておきます。

  • Vim8でdeopleteを試す

dice_zu/How ordinary Vim user contributed to Vim

How ordinary Vim user contributed to Vim

今回全体的に皆さんいわれていたことですが、Vimコントリビュートは怖くないよ。と淡々としながらも静かな熱意がみなぎる不思議なスライドでした。

vim-jpに助けてもらいつつも、Passionを持ってVimコントリビュータとなる経緯は非常にほっこりさせられましたね。

個人TODOとして次を上げておきます。

  • VimのBug Fixしてコントリビュート(次のVimConfまでで)

p_ck_/The new syntax highlighter for Vim

The new syntax highlighter for Vim

標準のsyntaxに不満をいだいたがためにRubyで実装してみたわって聞いて、おおプラグイン開発スタイルにも色々あるんじゃなと。

やはりVimさんも26歳ともなるといろいろと過去のコンテキストを引きづったなんかアレな部分があるのでしょうね。

各人のバックボーンを活かした柔軟な対応ができる。Vimの懐の深さに脱帽ですよ。

個人TODOとして次を上げておきます。

  • syntax highlightがどんだけ複雑か調べてみる

lambdalisue/You've been Super Viman. After this talk, you could say you are Super Viman 2 -- Life with gina.vim

You've been Super Viman. After this talk, you could say you are Super Viman 2 -- Life with gina.vim

あ、喫煙所ではお世話になっております素敵なアニキ。

とりあえず語りの旨さが尋常ではない。

流暢かつわかりやすい英語プレゼンは、非常に聞き取りやすく、gina.vimをいつ触るかって悩んでた私の背中をいとも簡単に押してくれました。

デモを見ておぉってなった。

個人TODOとして次を上げておきます。

  • tigによるGit操作をGinaに置き換えてなまらGit操作する

まとめ

テキストエディタだよ!?テキストをエディットをするだけのただの道具だよ!?

だというのに200人近くの人間が一斉に集まって、みんなとてつもない熱量でプレゼンを聞き入っているわけですよ。

Vimmerの愛ってすごい重いなと...

あんなに多数の方が喋ってたのに、かぶるところが一つもないって、ホントVimすごい。

VimConfは国際カンファレンスというだけあり。その肩書に恥じない充実サポートの数々。

  • fatihさんをゲストスピーカーとして招待
  • 全編に渡って同時翻訳がされる
  • 素敵なコーヒーカップでコーヒー飲める
  • 昼飯の弁当はなまら美味い
  • 懇親会は超豪華

個人スポンサーチケットで払った10kなんざあっという間に元が取れてしまった。

特に同時翻訳は英語弱者の私にとってとてつもなくありがたかった。

八時間も喋り通しのujihisaさんはちょいちょい翻訳の中に自分感想ねじ込んできてただの翻訳を超えたコンテンツになってた。お疲れ様です。

このような素敵な一日をプレゼントしてくれた運営の方々には本当に感謝しています。

私もこの魅力的なコンテンツを提供できる側に、来年は慣れたらなと思いますまる

改行コード一覧

$
0
0

私はiOSとWindows、たまにLinuxでアプリを開発しています。どのOSでどの改行コードを使うかわからなくなるときがあるため、一覧にしてみました。

改行コード名意味改行コードOSfileformat(Vim)
CR(Carriage Return)復帰。キャレットを左端の位置に戻すこと\rMac OS(9以前)mac
LF(Line Feed)改行。キャレットを新しい行に移動すること\nUNIX系全般unix
CRLF復帰+改行。キャレットを左端の位置に戻して改行すること\r\nWindows系全般dos

参考リンク

vimconf2017 に参加してきた。

$
0
0

vimconf2017 に参加してきた。

これで3回目になるが、僕が知っているこれまでの2回と比べて、国際カンファレンス感が大幅に増した回だったと思う。
国際カンファレンス感というのは、日本語を母国語としない人が理解できるように意識されているか?ということで、
同時通訳をつけたし、日本人でも英語で発表した人がいた、ということ。
こういう既成事実があると、来年からは、日本語を理解できなくても参加する人が増えるのではないか。
これは大きな変化だと思う。

会場も大きく、スポンサーもついてすごくちゃんとしたカンファレンスになったと感じた。

去年に続き、自分も発表者として応募し、採用されたので発表できた。
去年に続き、Atom editor 用の vim-mode-plus について話した。
自分としてはすごく思い入れの強い発表だった。聞いた人がどう思うかは別にして。

自分の発表

vim-mode-plus: The most ambitious vim emulator in the world

自分で振り返るために記録を残しておこう。この感想は自分のために書いてるんで、自分語りが多めだけど勘弁してよね。

英語で発表するのは人生

ちゃんとできるのか?30分もつのか?
日本語程、早く話せないし、スライドの進みが日本語よりは絶対遅くなるな。。。
となるとスライド減らすか。。緊張して頭真っ白になったらどうしよう??となるとスライドの文字削りすぎると頼るものが無くなるな。。。。
とか英語発表の不安要素があった。
しかしやってみたかった。よい経験になると思ったし。やはり国際カンファレンスと言っている以上英語で発表が多い方が良いだろう。
英語発表にした方がトークが採択されやすいかもしれない。。。
そもそも vim-mode-plus は世界中で使われてるんだし、録画された動画を海外の人が見て伝わったら凄くよそう!
どうせ vim-mode-plus のことは俺が世界で一番分かってるんだし、英語はリリースノートで常に書いてるから、俺が話さな誰が話すんやー、おらーっ送信ボタンぽちっ
という感じで自分に勢いをつけて申し込んだチャンジだった。

皆の反応は別にして、自分ではめちゃくちゃ上手くいった。

英語での発表ということでお風呂とか、トイレとか、いろんなスキマ時間で声を出してやったり、時間を図ってやってはスライドを調整したりと、試行錯誤していたが、
練習時に時間内で終わらせられたことが無かった。
理由は英語で説明しながらやるにしては、デモが多すぎるからなのだが、デモはある程度削ったので、もう削りたくなかった。。
ちょっとアドリブで発言しようとすると、それがうまく言えず、継ぎ足し継ぎ足しで補足が長くなり、喋りに時間を取られてしまう。
母国語の日本語でデモをする時はこのような事はないので、もっと沢山のデモをテンポよくこなせるのだが、英語だとそういう訳にはいかなかった。
もう本番でなるようになれ、という感じで望んだ。
結果は予想に反してめちゃくちゃ良くできた。普段の練習が 10 のうち 8 位の出来だとすれば、本番は緊張するから 6 位になるかもしれん。
7ぐらいできたらいいか、、みたいな事を考えてたが、12 ぐらい出来だった。
時間どおりに終わった。アドリブで付け足した発言も英語でスムーズに言えた。ちゃんと意味を成す英語になっているかはビデオとか見ないとホントは分からない。
ただ、個人的には英文が出てきたし、口も動いた。アドレナリンが出たのか、、本番で予想を遥かに超える出来を出せたのだった。

1年間 vim-mode-plus ばかりやってきた。

去年の俺の発表を見た人は、今回の発表はそれの続編のような感じであまり驚きは無かったのかもしれない。
個人的には今年 vmp に割いた時間はそれまでの比ではなく、安定性、コードの読みやすさ、UX 諸々、スーパー良くなった。
今回は vmp のユニークな機能は単なる fancy 機能じゃなくて、実践場面でめちゃくちゃ活かせるんだぜ、ということを show として見せたくて発表を応募したのだった。
それが今回できた。
vmp も際限なくやることはあるものの、自分が使う分には不満がなくなった。
今回の発表が1つ大きな区切りになると思う。
あー超感慨深いよ。。ほんとに vim のこと vmp のことだけを考えて過ごした一年だったんだよ。この感慨深さは多分俺にしかわかんねーよ。。あー燃え尽きた感じだよ。マジで。

どんなデモをやったか?

後々動画は上がると思うが。。。
試しにいまローカルでやってみた。

お題はコレ
TODO をこなしていくことで最後 enlightenment(悟り)に達する koan シリーズの vmp 番みたいなもの。
3分程度で終わるデモ。当日は喋りと解説込みなので、15分以上やっているはず。

https://youtu.be/g82pWeI0Dyk

他の人の発表について

他の人の発表について、興味深かったものを3つ書いた。
バーっとフリースタイルで書いてポストするから内容がテキトーなのはご愛嬌ということにしてくれ。
3つの発表以外も総じてレベルが高かった。これは twitter でも多くの人が書いていた。
この発表内容、昼飯、夜飯、ドリンク、会場、通訳とか入れて 5000 円は安いか高いかで言うと安いと思う。
どの発表者も自分で何かをつくって、それについて発表しているので、結果的に自分の事を語っている。なので、内容が当然濃くなるし、興味を惹くものになる。
これだけレベルが高いと来年の vimconf はどうなるんだ、ハードル高くない!??と感じさせる程、どの発表もかぶり無く、個性があり良かった。

Vim, Me and Community

hayabusa さんは hayabusa さん自身の Vim との歴史を話した。
それは彼のプログラムの歴史そのものでもあった。彼の人柄や説明のわかりやすさがにじみ出ていた。
hayabusa さんが EasyMotion を fork して弄り始めた頃は僕も覚えているが、その頃と今とではプログラマとしての技量は大きく違うのだろうというのは想像できる。
しかし元々、勘所もよく、何より "ちゃんとしたものに仕上げる" とか、 "しぶとい" という印象は持っていた。
しぶとさ、粘り強さというのは、ソフトウェアを個人で作り上げる上での超重要な要素だと俺は思っていて、hayabusa さんは今みたいにすごくなる前から信頼の hayabusa 印的なものがある人だった。だからこれからもどんどん凄くなっていくだろう。かっこいいぜ!

Creating your lovely color scheme

cocopon さんのカラースキームのお話。
これは vim のカラースキームの作り方を解説するものだったが、vim のカラースキームに興味のない俺でもすごく興味を持てるような、幅広く有用な発表だったと思う。
これは cocopon さんの話す順序や、ポイント整理の上手さ。スライドの美しさ、話すテンポ等、cocopon さん自身のスキルの高さがあるのだと思う。
カラースキーム俺でも作れそうだぜと、多くの人が思ったのではないだろうか、そういう風に思わせてしまうところが素晴らしい。見本のような発表だった。
cocopon 先生!

How ordinary Vim user contributed to Vim

dice_zu さん、 Vim のコントリビュータになった話。
ええ話。OSS の超有名なソフトウェアに自分のコミットログが残るというに憧れている人、その気持ちは分かるぜ。
でもそれは凄くならないと出来ないスーパーなことだと思うだろ?いや分かる、でもそうじゃないかも知れんぞ、もっと身近なものかもしれん、いまからやってみたら案外来月にはあなたのコミットが入っているかもしれない!というような煽りを受けた。dice_zu さんのトーンはこんな軽い感じじゃないけど。。
dice_zu 先輩!

さいごに

特に ujihisa さん、同時通訳、理解できないレベルですごかったです。あれだけのぶっ通しで、それぞれに内容の違う深い内容を訳すのは色々なことのレベルが高くないと出来ません。
打ち合わせで、ざっくりと同時通訳のリハをちょっとやってみた時、なんでそれ初回からできちゃうの?というレベルでやっていてビビりました。
あなたはすごすぎます!

Vim に凄く昔から関わってきた mattn さん、 kaoriya さんはどんな気持ちなんだろう?沢山の人が集まり、若い Vim コントリビューターも育ち。。
すごいことですよこれは。

去年も感じたし、今年も感じたが、mattn さんや kaoriya さん、k_takata さんといったすごい人、偉そうにしても誰も怒らないだろう様な人が本当に温厚で優しく、コワくない、というのは素晴らしく、また当たり前じゃない貴重なことだと思う。だから日本の Vim コミュニティは心地よいのかもしれん。

スタッフの皆様おつかれさまでした。最高に良かったです。

vimconf2017に行ってきました。

$
0
0

目的

vim conf2017参加の記憶が薄れないうちにまとめる。

三行要約

初めての国際会議及び、OSSの集まり
vimmerは幅が広い
これからもvimに貢献していきたい

全体

初めてのconferenceということで緊張していましたが、とても楽しめました。運営の方々ありがとうございました。
@ujmさんの英日翻訳がいい感じで面白かったです。
ところどころに挟まれるvimネタが面白かった。
おかげさまで英語の発表でもそれなりに楽しむことができました。
会場ではノベルティ、Wi-Fi、コンセント、コーヒーまであり、弁当、懇親会と充実した環境でした。
普段ネットでしかみないようなvimmerにあえて一人感動してしまいました。

vimは懐が広く、いろんなことが学べるということでvimを使うようになって正解だったなと感じました。
正直言ってvimを使うようになってから、プログラミングが上達してきました。。

何か書き足したくなったら、書き加えるかもしれません。

haya14busa/Vim, Me and Community

個人的には一番親近感がわくスピーカーでした。
haya14busaさんのVimとの歩みに自分と似たところを感じて、このようになりたいと感じました。
自身が開発を引き継いだEasyMotionとほかのプラグインとの相関関係を話されていて、
OSS界のプラグインの開発の過程を直接聞けたことは非常に興味深かったです。

よいプラグインがどのようにできていくのかを聞くことができて自分もプラグインを作りたい欲が出てきました。

fatih/The Past and Future of Vim-go

Go言語のための包括的なプラグインの開発の話でした。
このプレゼンを聞いているとvim-goを使いたいがためにGoをやりたくなってきた。
寄付だけで月200\$ももらっているというのは驚きでした。

内容は理解できませんでしたが、VimとGoへの愛があふれていることはわかりました。

mattn_jp k_takata kaoriya/talk show

vimのことを調べると必ずと言っていいほど出てくる方々が壇上で話していました。

patchを書いて送っているような人がたくさん来ていると思っていたが、あまり多くなくて意外だった。
日本でのvimの発展の様子を聞くことができた。

cocopon/Creating your lovely color scheme

colorshemeへの愛を感じるプレゼンでした。
プレゼンの様子も印象的でした。
プログラマーなら8時間はcolorschemeを眺めているとのくだりが印象に残っています。

colorschemeの奥深さや開発の流れ、仕組みを直接聞けて良かったです。
さらに、colorschemeを作っていく中でHSB/HSLを使ったほうがよい、明るさでコントラストをつけたほうがよい、など開発のコツも話していました。
今までは何となく使っていたcolorschemeに興味を持つきっかけになりました。

vimを使っていくなら一度くらいはcolorschrmeを作ってみたいです。

colorschemeを比較できるwebサイト(http://colorswat.ch/vim/)も作ってしまったそうです。
なんとモバイル対応もしてあるらしい。

後の懇親会で話をした時も非常に気さくな方でした。

t9md/vim-mode-plus: The most ambitious vim emulator in the world

これから、vim風のエディタを作ろうと思っているので後々参考にすることがあるかもしれないです。
今の時点では理解できませんでした。

enopen/Vim and Compatibility

POSIX原理主義を使ってVimの後方互換性を保ったvimrcを作るという試みでした。

POSIX原理主義は名前だけは聞いたことがありましたが、理解は全くしていなかったので勉強が足りないと感じました。

自分はまだVimをwindows環境でしか使っておらず、unixでは本格的には使ってこなかったのでこれからは考えてvimrcを書いていかなければいけないです。

ShougoMatsu/neosnippet.vim + deoppet.nvim

お世話になったことあるneosnippet.vimの開発者の話でした。
nvimの話も聞きたかったです。

スニペットの実装方法にも複数あることを知った。
歌を聞いてみたかった。

dice_zu/How ordinary Vim user contributed to Vim

普段は問題があったら運用で回避するらしい
普通の人がvimに貢献する方法についてプレゼンしていました。
パッチを送るにはバグフィックスが良いそうです。
そのためにはvimを毎朝ビルドして置くと結構見つかるらしい。
そこまではできてなかった。

会社の同僚をvimのコントリビューターに仕立て上げようとしたとのこと。

それから、やる気さえあればパッチもかけるそうです。
すごい。

少しずつ貢献していきたいと思います

p_ck_/The new syntax highlighter for Vim

vimのシンタックスハイライトの話。
「正規表現は人類には早すぎる」

lambdalisue/You've been Super Viman. After this talk, you could say you are Super Viman 2 -- Life with gina.vim

Vimmer, Viman, SuperVimanのための発表
今まではcmdに戻ってgit使ってたけどgina使ってみたくなった。
便利そう。

vimconf2017
haya14busa
faith
cocopon
t9md
senopen
ShougoMaatsu
dice_zu
p_ck_
lambdalisue

VimConf 2017に参加した(いつかBramさんが日本に来るのでは?と感じた)

$
0
0

はじめに

タイトルがちょっと釣り的な感じですいません。しかし、ほんとにそのように感じたので書きました。

参加ブログを書くのが遅くなりました(すいません)。タイミングを逃すと普通の事が書きづらくなる。。

ということで自分はちょっと違った切り口で。

ブログというか個人的なポエム?なものや誰かの役に立てればって情報類を書きます。

各トークについては他の方の質の高い沢山の参加ブログがあります。

また、今回のスピーカーでもある @cocoponさんが togetter でまとめてくれていますのでそちらをスルスル見ながら探してみてください。

いきなりまとめ

  1. いつか、もしくは近い未来にVim作者のBramさんがVimConfにくるのではないか。お昼に壇上でご飯を食べているBramさんを参加者全員で眺める日が来るのでは?といった勝手な興奮を感じました。
  2. 昨年(VimConf 2016)も参加しましたが今年はスポンサーもたくさん付いていてスケールが大きくなっていた。
  3. @ujimさんはほんと凄い。同時通訳等含めてとにかく感極まりました。@ujmさんが複数人いたら無敵ですね。
  4. VimConf 2017の興奮が冷めない人は
    • vim-jpのslackにでも登録すれば良いと思う
    • .vimrc読書会に参加すればよい
    • meguro.vimとかosaka.vimとか、fabric.vimとかに参加するとか

以下、各発表を聴いた感想?ポエム的?なものになります。

Vim, Me and Community

スピーカー: @haya14busaさん

お話の主題だったincsearchのパッチについてはリリースされる際に @haya14busaさんのTLの前後をチラチラ見ていたりしました。

今まではトリッキーな印象も受けていて、このまま自分はこれに依存していて良いのか、普通のvimmerではなくなるのではないか?といった疑問、恐怖が出たりしたのでincsearch.vim関連は有効にしたり無効にしたりしていた時期がありました。

そんな中で、先日Vimのパッチとしてincsearchができるようになりました。

これで安心して使うことができます。

個人的にはこのパッチが入ったときに 以前からこの挙動がデフォルトだったのではないか?と感じるくらい凄く自然で不思議な気持ちでした。

おめでとうございます。

その他では、以前Google翻訳が賢くなった際に音速の勢いで開発されてた
vim-open-googletranslate と electron-open-url ( @rhysdさん ※犬さん? )の連携。

こちら、かなり常用しています。

いつも、ありがとうございます。

The Past and Future of Vim-go

スピーカー: @fatihさん

TLでvim-goを使いたいからGoを覚えようって人がちらほらいました。
チュートリアルがありますのでやってみましょう。

vim-goについてわからないことがあれば

  1. :h vim-goをする
  2. Vimでのヘルプ閲覧が得意じゃない?なら GitHub で見てみる
  3. 最悪 @fatihさんになんらかの手段で直接聞くか、
  4. Goを書く際にvim-goに依存しているとお話されている @mattnさんに聞きましょう

TLでVimmerでGopherが多いって話しも流れてました。

現在では GoのEditor plugins and IDEs のページでvim-goが一番最初に説明されてますのでこれからもどんどん増えるでしょうね。

個人的にはVimmerでRubyistも多いような気がしてますが。

その他、 @fatihさんはPCを触るときはメガネをかける方でした。最近自分もメガネキャラなので親近感。

Talk show (Vim 鼎談)

スピーカー: @mattn_jpさん @k_takataさん @kaoriyaさん

このお三方に関しては何も言えません。。

なんというか はじめて牛久大仏を真下から見たくらいの圧倒感。
人型の巨大なものって凄い圧倒感です。見たことない方は牛久へGo!!

とにかく僕にはそのように見えています。
大きすぎて全貌を直視できませんし、目があったら速攻逸らすしかできません。

遠い昔、エディタ選びで悩んでた時期がありましたが今はVimがあるので安心です。

Vimがあるので他のエディタやIDEも気軽に触れますね。戻る場所があるので。

なんというか、 彼女や奥さんがいるほうが浮気しやすいみたいなそんな感じです。
※例えばの話なので基本的に浮気はしません。基本的に。

Vimを日本人が使いやすい状況を作って頂き、非常に感謝しています。ありがとうございます。

Vim 鼎談 のお話の中で出てきたトピックとして何点か、貼っておきます。

Creating your lovely color scheme

スピーカー: @cocoponさん

自分のカラースキームは molokaisolaizedでlightを使っています。
今回のお話を聞いて自分もカラースキームを作ってみようかなという気持ちになりました。

とりあえずお話の最中にicebergを入れて試させて頂きました。

そのまま帰宅後も使っていましたが季節的なものもあるせいか、ちょっと寒いです。凍えそうでした。
寒くて凍えそうということはコンセプト通りなわけで、恐れ入りました。

暖かくなってきたらまたicebergのcolorschemeを使います。

それと最近目自体の最大HP(ヒットポイント)が減ってる感じもありまして、ブルーライトを60%カットするPC用メガネも持っているのですがそれでicebergを見るとちょっと見づらい感がありました。

vim-mode-plus のお話

スピーカー: @t9mdさん

昨年のVimConf 2016の続編のようなお話。

vimtutorや 実践Vimのような形式でのライブセッションは圧巻。

Vimを模倣するものって色々ありますよね。

  1. Vimキーバインドやその他アクションの諸々をVimに近づけもの
  2. 上記を含んで、且つ、Vim自体を飛び越える機能を含んだもの

vim-mode-plusのお話は後者になります。勿論前者も重要です。
VimキーバインドがないからあのIDEは〜とか。あのブラウザは〜とか。

あれは〜とかこれは〜とか色々ありますよね。

自分はVim以外ではJetBrains製のIDEを使う場合があります。

IdeaVim(Vim6ベース?だったかな)というものがあるのですが、後者側のように発展して欲しかったり、
それか何か新しいのが出てくれると嬉しいなーというのが本音です。

ちなみになんとなく実践Vimのリンクを貼っておきます。

Vim and Compatibility

@senopenさん

グラサンで黒服といったフォルムにビックリ。怖い。。。ってイメージでしたがグラサン取ったら優しそうな人。

( •_•)
( •_•)>⌐■-■
(⌐■_■)

Vimのバージョン相違問題の回避策について。特に古いVimにも対応する方法等含め、お勉強になりました。

上記も踏まえたポータビリティな.vimrcというお話もありましたが、個人的に最近は環境やユースケースにあわせて.vimrcを用意するようなイメージになりました。といっても今は2パターンくらいですが。

メイン環境(ローカルマシン用)とスモール環境?(サーバー用とか)ですかね。

自分が触るようなものなんかだとnpm(Node, JavaScript, TypeScript, etc...)で色々いれたりcomposer(PHP)で色々いれたり、pip(Python)で色々いれたり、gem(Ruby)で色々いれたり、Goの色々入れたり(これは:GoInstallBinariesありがたい)、そもそもOSのパッケージマネージャーで色々入れたり(rgとかagとかetc...)というように結構、色々依存していて面倒なんですよね。

それ以前にちゃんとPythonやRubyも入ってないといけないですしね。その上でVimをビルドしてとか。

ということでスモール環境用のものはちょっと意識してみようかなと思いました。

今のところはその依存したツール類やプラグイン等が気に入っているのですが、いつかバニラVim側、スパルタン側に傾いてきたらそのときは.vimrcに書くものがなくなってきて寂しくなるので今回のお話を参考にやってみたいと思います。

Vimは盆栽、Vimは育てゲー。

neosnippet.vim + deoppet.nvim

@ShougoMatsuさん

説明不要のあんこっくびむおう!みんな大好きShougoさん。
スニペットのお話。勉強になりました。

ShougoWareのneocompleteを使いたいがために+luaなVimをコンパイルする人も沢山いますよね。

以前は自分もDark poweredな装備(プラグイン)をさせて頂いていました。

個人的にNeoVimを使っていなかったり、NeoVimに乗り遅れた?関係もありでしょうか。
現在は海外製のスタンダードなそれらを使ってます。

  • NeoBundle ----> vim-plug
  • Vimfiler ----> NERDTree
  • NeoComplete ---> YouCompleteMe
  • neosnippet ---> Ultisnips

お話の中で来年は凄いことになるようですので。

プラグインは結構ドックフーディングする派なので期待してます。

How ordinary Vim user contributed to Vim

スピーカー: @dice_zu

Vimの本体に contribute した際のお話でした。

Vim活のお話もされてました。Vimは毎朝ビルドするもののようです。

そういえば自分も最近?最近か?うーん...。Vimを毎朝ビルドしています。

最初は http://vim-jp.org/のサイドバーの「Patches」でパッチの更新をみたりlingrをROMったりで見てたりしてました。

毎朝ビルドが無理な人は月に1回でもビルドしたら良いのかなとも思います。

英語が苦手な方は 今回の色々な方のスライドでも記載のあった有名人の @h_eastさんが Qiita で月の半ば頃から月末にかけて 【Vim patchダイジェスト】 というものを更新されてます。

月1くらいならできるでしょ。

Vimのビルドは怖くないと思うのですが、やっぱり怖いって人はそうですね。

CUIでよければDockerで環境でも作ると良いかもしれないですね。

毎朝のVimのビルドにも飽きてきたら使っているプラグインの更新を追っかけたりすれば良いかもですね。

そんなこんなやってると細かい諸々が見えてきて本体に〜とかなる人もいるのかもしれないなーなんて。

改めてVimは盆栽、Vimは育てゲー。

The new syntax highlighter for Vim

スピーカー: @p_ck_

syntax highlightを独自実装したお話のようでした。

すいません。正直に言うと所要でロビーにいましたのでお聞きできませんでした。後日、公開されるであろう動画みますー。

gina.vim のお話

スピーカー: @lambdalisueさん

(You've been Super Viman. After this talk, you could say you are Super Viman 2 -- Life with gina.vim)

人間にとって優しくて、非同期なgina.vimのお話。

ちなみに gina.vim については Software Design 2017年10月号 に記事がありますので買ってない方は買いましょう。

Vimを使う人には下記のようなレベル分け?があるようですw。

  • Vimmer
  • Viman
  • Super Viman
  • Super Viman 2
  • Super Viman 3
  • Super Vimman God

個人的には vim-fugitive を使っています。

gitを使うのにわざわざVimを立ち上げるなんてお話もありまして「わかるー」って感じの女子的な共感がありました。

といってもそのときの状況によるわけでして 最近のVim8の :terminal の立ち上げてパシパシっとやってとか。

そもそもtmuxで分割しているときにはそこでやったりとか。tigからやったりとか様々ではあります。

今後パワーアップするそうで要チェックです。

メインのVim関連のお話とはちょっとそれてしまいますが lambdalisue さんはJupyter NotebookのVimキーバインドも開発されている方です。

Python関連のお話も書いておくと今の御時世だとなんとなく食いつく人もいると思うので書いておきます。

これは先日までjupyter notebookでVimモードからJupyterモードに戻る際に Shift-ESCというMacでタッチバー搭載マシン使いな人には辛いキーバインディングがありました。

現在は :qというそれこそVimそのものってキーバインドになっています。クール。

といっても自分は一般教養レベルでしかjupyter notebookは触らないですが。

その他、VimConf 2017の喫煙組のリーダー的な存在でした。喫煙所をあけるとたいてい「いらっしゃい!」って感じのバーのマスター感が出ていたのが印象です。接しやすいー。接しやすいは正義ですね。

そして懇親会 & LT & 終わりに

楽しかったし、ほんとに居心地が良かったです。

その他にも色々ありましたがとりあえず、つらつらと書き疲れました。。
これでもだいぶ削除しました。

最後に、改めて運営の皆様、スピーカーの皆様、お疲れ様でした。ありがとうございました。


Visual Studio CodeのVim拡張で行端のカーソル移動設定

$
0
0

Visual Studio CodeにVim拡張を入れて使用しているが、行頭左移動で前の行末、行末右移動で次の行頭に移動したいと思った。
keybindings.jsonから次の設定を削除した(左の例だが右も同様に削除する)。

{
  "command": "extension.vim_left",
  "key": "left",
  "when": "editorTextFocus && vim.active && !inDebugRepl"
}

これでカーソルキーによる移動については実現できた。
hやlについては設定方法がわからなかった。
軽くググったところ、whichwrapに対応する設定がVSCodeのVim拡張には無いかもしれない?

何気に良く使うVim tips #3 カーソル下の文字列を検索

$
0
0
print(x)print(y)# ^ カーソル

#でprintを検索

たまたま見つけたのだが、

visual modeでの選択範囲を一発で検索の方法を知っている方いたら教えてくだいさい!

Vimの正規表現で後方置換を行う

$
0
0

Vimの正規表現で後方置換を行うには\1とエスケープ一個で行う。パターンは\(\)のようにエスケープする。

valid:IntvaltypeId:IntvalmedidId:Int

上記のような宣言を代入に変えるサンプル

:%s/val \([a-zA-Z]*\):.*/\1 = \1/

すると下記のようになる

id=idtypeId=typeIdmedidId=medidId

Vim で delete キーを押したら ^? になる

$
0
0

起きたこと

研究室で使用しているマシン上で、vim を使うと、
ctr + H でしか、デリートができなかった
(delete キーを押すと、 ^?と出た)

やったこと

delete キーで削除できるようにした

vimrc/bashrc どちらの方法でも問題は解決できた

vimrc の設定を変える

~/.vimrcに、

.vimrc

noremap! <C-?> <C-h>

を追加する

bashrc の設定を変える

または、

~/.bashrc

.bashrc

 stty erase '^?'

を追加する

終わりに

当初、bashrc の設定を変える方法で問題解決を図ったが、
「vim の問題は vim で解決するべきだろう」
と思い、 vimrc の設定を変える方法に変えた

.vimrc
set compatible "nocompatible だったのを変更:fixdelset backspace=indent,eol,start

これも試してみたものの、自分の環境ではキーマッピングの問題だったみたい...

参考

vim backspace leaves ^?
Mapping control-H in insert mode doesn't work; it always works like backspace
VimTip, Todo
Backspace and delete problems

【図解Vim】mapとnoremap

Vimで余分なスペース・改行コードを自動削除するプラグイン

$
0
0

vim-non-blank

というプラグインを書きました。
余分なスペース・改行コードをファイル保存時に自動で削除します。

インストール

vim-plugを使う場合、

Plug 'raviqqe/vim-non-blank'

使い方

ファイルを保存するときに、

foo  $
$
bar baz    $
  $
$
$

($は改行コード)

これが、

foo$
$
bar baz$

自動でこうなります。

問題点

普通にautocmdでコマンド走らせてるだけなので編集履歴がファイル保存時に無駄に更新されます。
オートセーブ有効にしてると辛い。

まとめ

なんとかならんでしょうか。

.Vimrcの共有

$
0
0

ずっとmac環境でemacsのバインドに慣れていたため、そのまま生きてきましたが、新たにデスクトップPCを購入しWindowsとUbuntuで運用しているとそれが手間に感じることが増えてきた。

なので、とうとうvimに移行することを決意。
いろいろな設定をし、それなりに快適なvimrcを作成したがそれを他のマシンと共有するために.vimrcを移動しエイリアスで場所指定しても、なんかたくさんエラー吐いて怒られたので困っていたところ以下の記事を発見。
dotfilesをGitHubで管理
単純に~/vimrc/とかディレクトリを作成した後、~/vimrc/.vimrcとかして、ln -sf ~/vimrc/.vimrc ~/.vimrcとかすれば平和が訪れました。
あとは、vimrcをgithubにプッシュして他のマシンでクローンすればおっけー

Vim 変数とオプションをコマンドで確認する方法

$
0
0

Vimで変数とオプションの確かめ方を調べたのでメモしておく。
設定がちゃんと通っているか確かめたいという時に便利。

変数 (Variable)

:let samplevariable ='foo':echo samplevariable
foo

結果はfooと表示されます。

オプション (Option)

:settextwidth=80:echo &textwidth80

結果は80と表示されます。
注意すべき点は、オプションを呼び出すときは前に&をつけることです。


参考
http://learnvimscriptthehardway.stevelosh.com/chapters/19.html


Vimのキー割り当て

$
0
0

Vimは高機能なテキストエディタです。
Vimのコマンドを使いこなすことで、コーディングスピードが圧倒的に向上します。
そんな便利なVimを、自分向けにカスタムして更にコーディングスピードを上げることができます。
ここではVimのキーの割り当てをカスタマイズする方法を記述します。

Vimの"個人"設定ファイル「.vimrc/_vimrc」を編集する

◆システムvimrcとユーザvimrc

Vimの設定ファイルvimrcには2種類あります。
一つはvimrcというファイル名のシステムvimrc、もう一つは.vimrcまたは_vimrcというファイル名のユーザーvimrcです。
この設定ファイルはシステムvimrc→ユーザvimrcの順で読み込まれ、重複する設定はユーザvimrcで上書きされます。
また、システムvimrc全ユーザ共通の設定ファイルであり、ユーザvimrcユーザ固有の設定ファイルになります。
その為、Vimに新しくキーを割り当てる際にはユーザvimrcである.vimrcまたは_vimrcを編集していきます。

※共有したい設定であれば、システムvimrcを編集するのもアリだと思います。

◆「.vimrc/_vimrc」とは?

簡単に言うと_vimrcWindowsでのユーザvimrc名です。
とは言っても、Windowsでは_vimrc.vimrcの順、Mac、Linuxでは.vimrc_vimrcの順で、どちらでも読み込まれるそうです。
しかし、どちらか片方のユーザvimrcを読み込んだ後、続いて他のユーザvimrcを読み込んだりはしないので(例えば先に.vimrcを読み込んだら_vimrcは読み込まない。)、期待しない挙動や混乱を防ぐためにもユーザvimrc名はどちらかに統一させた方が良いと思います。

◆「.vimrc/_vimrc」の配置場所

では.vimrc_vimrcはどこにあるのか?
結論から言うとありません。
無いので自分で作ります。
OS毎の配置場所は以下になります。

【Windows】
C:\Users[ユーザ]\

【Mac】
/Users/[ユーザ]/

【Unix】
/home/[ユーザ]/

それぞれ上記階層フォルダ直下に空のファイルを作成し、その中に設定を記述していきます。

※システムvimrcのvimrcはvimをインストールしたフォルダ最上層に入っています。

キーの割り当て

◆キーの割り当て設定

.vimrcまたは_vimrcに以下のように記述することで、Vimコマンドにキーを割り当てることができます。
コマンド名 <オプション> 実際の操作 割り当てたいVimコマンド

1.コマンド名

ここにはまず大きく2つ分けてnoremapまたはmapが入ります。
意味としてはVimコマンドのnoremapコマンド、mapコマンドと同じでnoremap再割当無しmap再割当有りです。
つまり、noremapを使えばシステムのキー割り当てに従い、mapを使えばユーザーが定義したキー割り当てに従ってキーが割り当てられます。
いつか機会があれば別ページでこちらの2コマンドについても記述したいですが、とりあえず今は保留しますので、しっかり意味が知りたい方は調べてください。
とりあえず、普通にデフォルトのvimコマンドに対してキーを割り当てたいのであればnoremapを記述してください。

また、noremapmapノーマルモードビジュアルモードにおけるキーの割り当てです。
最後に!をつけてnoremap!map!とすることでコマンドラインモードインサートモードにおけるキーの割り当てになります。
他、最初にnvciと付けることで、それぞれノーマルモードビジュアルモードコマンドラインモードインサートモードにおけるキーの割り当てができます。

2.オプション

省略可能。
以下の種類があります。

<buffer>
バッファローカルにキーを割り当てます。(カレントバッファだけで使用するキーの割り当て)
<silent>
実行するコマンドがコマンドラインに出力されないようにします。
<special>
特殊キーを用いる場合に使用します。
<sscript>
既にマッピングされているものとの衝突を回避します。
<expr>
割り当て先の文字列をVimの式とみなして、評価した結果の文字列を割り当てます。
<unique>
すでにキーを割り当てている場合、エラーにします。(通常は上書きされる。)

3.実際の操作

割り当てたいキーを記述します。
Space等の特殊なキーは<>で囲んで記述します。
Ctrl + c<C-c>となります。

4.割り当てたいVimコマンド

割り当てたいVimコマンドを記述します。

記述例

上記ルールに沿って.vimrcまたは_vimrcを編集したらキーの割り当ては完了です。

ノーマルモード時にスペース+エンターで空行を挿入(コマンドをコマンドラインに出力しない)
nnoremap <silent> <Space><CR> o<ESC>

自分の好みにカスタマイズして、快適なVimライフを送ってください。
お疲れ様でした!

vim備忘録

$
0
0

はじめにというより注意書き

殆ど私用です。
読みづらい点が多々あると思いますが、あしからず。

移動・ジャンプ編

ジャンプ力ぅ…ですかねぇ…

コマンド効果
h , j , k , l上下左右の移動。言わずもがな
w次の単語の先頭へジャンプ
e単語の最後にジャンプ
b前の単語の先頭へジャンプ
0行の先頭へ移動
^行の最初の文字へ移動
$行の終わりへ移動
g_行の最後の文字へ移動
gg最初の行へ移動
G最後の行へ移動
[n]Gn行目へ移動

モード切り替え編

移動よりも先に覚えた

コマンド効果
iカーソル位置で挿入モード
I行の先頭で挿入モード
aカーソル位置の直後で挿入モード
A行の末尾で挿入モード
o現在の行の下に行を追加して挿入モード
O現在の行の上に行を追加して挿入モード
ea単語の末尾で挿入モード
Esc挿入モード終了

編集編

さり気なく使いたい

コマンド効果
r単一の文字を置き換える(挿入モードは使用しない)
J現在の行と次の行を連結する
gJ現在の行と次の行を、空白を入れずに連結する
cwカーソル位置の単語を削除して挿入モード
c$カーソル位置から行末までを削除して挿入モード
sカーソル位置の文字を削除して挿入モード
S現在のを削除して挿入モードを開始(ccでも可)
u元に戻す
Ctrl-rやり直し
.最後に使ったコマンドを使う

uとCtrl-rはそれぞれ、GUIのアプリについてる矢印マークと考えるといいんじゃないでしょうかどうでしょうか

コピー&ペースト編

未だにCtrl-c

コマンド効果
yy現在の行をヤンク
[n]yn行をヤンク
ywカーソル位置の単語をヤンク
y$現在行の行末までヤンク
pカーソルの位置のにペースト
Pカーソルの位置のにペースト
dd現在の行をカット(コピーして削除 )
[n]ddn行をカット
dwカーソル位置の単語をカット
Dカーソル位置から行末までカット(d$でも可)
x現在の文字をカットする

検索・置換編

置換はミスが怖くて使えない(初心者並感)

コマンド効果
/[pattern]patternをファイル後方に向けて検索
?[pattern]patternをファイル前方に向けて検索
n同じ方向に再検索
N逆方向に再検索
:%s/[old]/[new]/gファイル全体でoldをnewに置き換える(最後にcをつけると確認あり)

範囲選択編

選択した後は煮るなり焼くなり

コマンド効果
Ctrl-v矩形(くけい)選択スタート
V行選択スタート
Esc選択モード終了

さいごに

こうしてみるとほとんど使いこなせていないです。
一年後くらいには思いのままに使いこなせるようになりたいですね。
いろんな所のプロフィールにvimmerと書くのが僕の夢です。

参照

Vim Cheat Sheet

VimでCSVファイルの3列目をキーにしてソートする

$
0
0

Vimには:sortコマンドが用意されています。これを使えば、バッファ内の行を柔軟にソートすることができます。

:sortの基本

以下のようなファイルに対して、:%sortとすればファイル全体が辞書順でソートされます。

names.txt
charlie
alice
bob
dave
eve

以下のように数値であれば、nオプションをつけて:%sort nとすれば数値順でソートされます。

number.txt
100
10
1

CSVを3列目でソートする

以下のようなファイルを開いているとします。:%sort /,[^,]*$/ nrを入力します。

sample.csv
charlie,1,1
alice,5,10000
bob,4,1000
dave,3,100
eve,2,10

すると、3列目でソートしたファイルが得られます。

sample.csv
charlie,1,1
eve,2,10
dave,8,100
bob,4,1000
alice,5,10000

もっと汎用的に考えてみます。以下のファイルがあったときに、任意のカラムでソートしたいとします。ソートのキーとなるカラムは数値で指定するとしましょう。

sample2.csv
alice,5,10000,d
bob,4,1000,e
charlie,1,1,a
dave,8,100,b
eve,2,10,c

3列目をソートしたければ、 :%sort /\([^,]*,\)\{3\}\zs[^,]*/ rとします。3を書き換えれば任意のカラムでソート可能です。

応用

CSVはシェル・コマンドのsortで簡単にソートできますが、Vimのソートはより柔軟です。

以下のようなPHPファイルがあると仮定します。

before.php
<?php$users=[['name'=>'P=NP','department'=>'Production'],['name'=>'alice','department'=>'Planning'],['name'=>'=bob=','department'=>'Customer Support'],['name'=>'eve','department'=>'Planning'],['name'=>'dave','department'=>'Sales'],['name'=>'jack','department'=>'Human Resources'],['name'=>'kay','department'=>'Human Resources'],];

ここに対して、 ソート箇所をVisualモードで選択し、 :'<,'>sort /department' => '\zs[^']*\ze'/ rを打つと部署をキーとしてソートした結果が得られます。

after.php
<?php$users=[['name'=>'=bob=','department'=>'Customer Support'],['name'=>'jack','department'=>'Human Resources'],['name'=>'kay','department'=>'Human Resources'],['name'=>'alice','department'=>'Planning'],['name'=>'eve','department'=>'Planning'],['name'=>'P=NP','department'=>'Production'],['name'=>'dave','department'=>'Sales'],];

tips

無理な正規表現を書きたくない人で、シェルコマンドが分かる人なら、:%!sort -t',' -k=3としてもソートできます。

詳しくは

:help :sort

jedi-vim対応 pythonコンパイルオプション

$
0
0

--with-features=huge --enable-multibyte --enable-pythoninterp=yes --enable-tclinterp --enable-cscope --enable-fontset --enable-gui --enable-gnome-check --without-x --enable-gpm --disable-darwin --disable-netbeans --disable-selinux --with-python-config-dir=/usr/local/lib/python2.6/config

VimConf 2017 でトークしてきた

$
0
0

11/4 に開催された VimConf 2017でトークショーに出演してきましたので、その報告です。

トークショー予行演習(?)

昼休みは、トークショーの予行演習として(?)、koronさん、mattnさんとともに、壇上で衆人環視の中弁当を食べつつ、適当に質問に答えるという希有な体験をさせていただきましたw
弁当はかなり立派で、おいしかったです。

トークショー

「Vim鼎談」という題で、koronさん、mattnさん、私の3人でトークショーを行いました。Vimを使い始めた契機や、どのように開発に関わってきたかなどいろいろ話しましたが、トークの内容は「vimconf2017へ行ってきました」などを見ていただけるとなんとなく分かるかもしれません。

話した内容の補足をいくつか書いておこうと思います。

私がVimの開発に関わり始めた経緯についてですが、私の最初のvim-jpへの書き込みは「less.sh/less.vimの動作をlessに近づける · Issue #191」で、vim-jpが発足してから半年後のことでした。このときの修正はruntimeファイルに対する修正だったため、パッチ番号は割り振られていません。
Vim本体に対して、最初に投げたパッチは、Windowsでのsymlinkの挙動を修正する 7.3.1182でした。他の人が作ったパッチを改良して取り込んでもらったことが何度もあるという話をしましたが、実はこのパッチもそうでした。ただ、このパッチは取り込まれるまで 10ヶ月も掛かったため、最初に取り込まれたのは他のパッチ(7.3.688)でした。

さて、私の最初のパッチが取り込まれてからしばらくした頃、VimConfの前身である ujihisa.vim#3が開催されたのですが、そのときの koronさんの発表資料 (vim-jpの活動報告) を見ると、今と比べるとパッチの数がずいぶん少なく、隔世の感があります。Vimもvim-jpもかなり変わりました。

トークショーでも話したとおり、この5年でパッチを300個ほど取り込んでもらいましたが、実際にはそれだけでなく、パッチ番号が付かないドキュメントやruntimeファイルへの修正も多数送ってきました。また、ソースコード本体の修正ではなく、(mattnさんの指摘のように)テストや、ビルドシステム(configureやMakefileなど)に対する修正なども多数あります。Vimの開発に参加したいという方は、このようなところから関わってみるのもよいでしょう。
なお、開発者が少ないプラットフォームは穴場です。WindowsやCygwinなどはパッチのネタの宝庫と言えるかもしれません。

後は、話題に上ったパッチ等について、関連情報へのリンクを記載しておきます。

  • Cygwinでクリップボードを使えるようにするパッチ: 7.3.836 (他の人が作ったパッチを、最新版に合わせて修正。)
  • 日本語をスペルチェックから除外するパッチ: 7.4.088
  • DirectWrite対応: 7.4.393
  • lambda対応: 7.4.2044 他多数
  • pythonx: 8.0.0251
  • 'makeencoding': 8.0.0427
  • Windows CUIで画面が正しく復帰されない問題の修正パッチ: 8.0.0905
  • Windowsのチャンネル速度の改善: 8.0.0925
  • 日本語入力の over-the-spot 対応: 8.0.1026
  • 日本語入力onがデフォルトとなっている問題の修正: 8.0.1114
  • シンタックスハイライトが突然offになる問題の修正: 8.0.1133
  • タブページのD&D対応パッチ: 8.0.1211 (取り込まれるまでに3年11ヶ月掛かった)
  • Vim 8 / Neovim用の新しいプラグインマネージャー: minpac

一部のパッチは、私のVimConf 2013の発表資料でも紹介しています。

他の方の発表

一言感想です。

  • haya14busaさん
    incsearch.vim の機能がついに本体に入って、よかったです。

  • fatihさん
    まだvim-goは使ったことがありませんが、試してみたくなりました。

  • cocoponさん
    カラースキームの作り方と、その際に有用なプラグイン、カラースキームの比較サイトの説明。
    デザインの知識がない私にとって、色を作るのにHSB(HSL)色空間を使うと直感的というのは非常にためになる情報でした。色弱者の話などを含め、カラースキームだけではなく、他にもいろいろ応用ができそうです。

  • t9mdさん
    去年に引き続き、Atomのvim-mode-plusの話でした。Vim以上にVimな感じです。

  • senopenさん
    POSIX原理主義に始まって、ポータブルな .vimrc を書く話でした。
    (最近は、新しいVimが使えないなら自分でコンパイルしよう、な私。)

  • ShougoMatsuさん
    スニペットプラグインの話。
    スニペットプラグインを理解するために自分で作ったというエピソードが面白かったです。あと、deoplete.nvimのWindows開発者を募集中だそうです。(私は使っていないので、すみません。)

  • dice_zuさん
    どうやってパッチを書くか。情熱。毎日Vimをビルド。
    パッチを書ける人が続々と増えていて嬉しいです。

  • pockeさん
    正規表現ベースではなく、言語自身のツール等を使って構文解析をした結果を使って、シンタックスハイライトを行う方法の提案。「正規表現は人類には早すぎる。」
    非常に大きいファイルに対しては速度的な問題があるようですが、将来的な発展の可能性を感じます。

  • lambdalisueさん
    Git用のプラグイン、gina.vimの説明。
    UIがとてもよく考えられているなあという印象です。

懇親会

懇親会の食事もずいぶん豪華でした。去年と比べると倍以上したチケットですが、これと昼食だけで十分元が取れるとのこと。実際よかったです。
メルカリ様からは、EmacsとVimの缶バッジもいただきました。最初はEmacsだけもらったのですが、Vimが余ったということでVimももらいました。

さて、懇親会でいくつか質問があったので、紹介しておきます。

  • :map等のコマンドの結果は、分量が多いとmore風のページャーで表示されるが、そこで/等で検索できるようにならないか?

    便利かもしれないが難しそう。:redirでリダイレクトしてから検索するか、:filter /Match/ mapするのが現実的な代替手段ではないか?

  • 大きい画面で使っていると、下に出てくるメッセージを見落としてしまう。特に検索でwrapしたときなど。メッセージをポップアップしたり、せめてメッセージ出力をフックできないか?

    80x25等の画面サイズが標準だった頃の設計を引き継いでいるので、大きい画面ではそのような問題もあるかもしれない。
    その場ではよい対策案を思いつかなかったが、そのようなオートコマンドを用意するのはありかもしれない。

  • Vim の Git リポジトリには、Vim 7.0 以降のコミットしか残っていないが、それよりも古い履歴はないのか? (senopenさん)

    SourceForge に CVS リポジトリがある。Git 形式に変換して、GitHub 上で参照できるようになっていると便利かもしれないと思っているが、手を付けていない。
    http://vim.cvs.sourceforge.net/viewvc/vim/vim/に、5.5 辺りから 7.0 までの履歴がある。
    http://ftp.vim.org/vim/old/には、1.14 から 4.5 までのソースコードが tarball で公開されている。
    http://ftp.vim.org/pub/vim/unix/には、3.0 から 8.0 までのソースコードが tarball で公開されている。

Viewing all 5608 articles
Browse latest View live