タグ

ブックマーク / tyru.hatenablog.com (11)

  • 空白をスキップして縦に移動するマッピングを提供する Vim プラグイン作りました - Humanity

    github.com 空白をスキップして縦移動するマッピングを提供するシンプルなプラグインを作りました。 言葉で説明すると分かりにくいと思うのでそれぞれスクリーンショットを貼ります。 non-blank mappings 関数定義・if・while などブロック・ステートメントの対応する始まり・終わりに飛びたい時などに使ってます。 " マッピング例 nmap sj <Plug>(columnskip:nonblank:next) omap sj <Plug>(columnskip:nonblank:next) xmap sj <Plug>(columnskip:nonblank:next) nmap sk <Plug>(columnskip:nonblank:prev) omap sk <Plug>(columnskip:nonblank:prev) xmap sk <Plug>(colu

    空白をスキップして縦に移動するマッピングを提供する Vim プラグイン作りました - Humanity
    emonkak
    emonkak 2020/05/05
  • Ctrl-[ が Esc になる理由 - Humanity

    理由 SHIFT キーはキーコードを -0x20、CTRL キーはキーコードを -0x40 する機能 全文 vim-jp.slack.com の #random から。 heavenshell [10:08 AM] TouchBar MBP にしたら強制的に C-[ になるので、オススメです!ようやく矯正できた。 mattn [10:09 AM] 人間の方が最適化されている yoshitia [10:12 AM] Escが物理的にない状況用にデフォルトでCtrl-[ 用意してるのすごい mattn [10:14 AM] いや、用意した訳ではないです。 SHIFT キーはキーコードを -0x20、CTRL キーはキーコードを -0x40 する機能なのです。 なので `[` つまり 0x5b は 0x1b になる。 0x1b = ESC 同様に CTRL-H は H が 0x48 なので 0x

    Ctrl-[ が Esc になる理由 - Humanity
  • Vim で端末ウィンドウを複製する - Humanity

    Vim で端末ウィンドウを使ってるとスクロールされた出力を見たくなる時があると思います。 ただシェルでコマンド実行中なので、 <C-w>N すると出力も止まってしまう。なるべくなら出力を止めたくないと思います(たぶん)。 そういう時は以下を vimrc に貼り付ければ <C-w>y で端末ウィンドウの複製バッファができます。色とかもそのまま。 追記 (9/25) すみません、以下のコードだとやっぱりスクロールされた出力は見れませんでした…直すのでお待ちください…というか誰か直してください… tnoremap <C-w>y <C-w>:<C-u>call <SID>dup_term_buf()<CR> function! s:dup_term_buf() abort let file = tempname() call term_dumpwrite('', file) call term_d

    Vim で端末ウィンドウを複製する - Humanity
    emonkak
    emonkak 2018/09/24
  • Vim script で Chrome Debugging Protocol を扱うライブラリを作りたい - Humanity

    github.com タイトルの通りなのですが、Chrome Debugging Protocol (以下 CDP) を扱うためには、 CDP は WebSocket ベースなので WebSocket を実装しなきゃならない バイト列をパースする際にヌルバイトを Vim では扱えない となって悩んでいます。 ヌルバイトを扱う部分は Python/Ruby/Lua インターフェースを使ったり、外部コマンドでやったりと策がないわけではないのですが、 どうせなら Vim で扱う方法を考えてみようというわけです。 CDP を実装しようとしたきっかけ Chrome を (CDP が許す限り) 意のままに操ることができるからです。 まだ CDP をざっくりとしか調べてないのであまり風呂敷を広げすぎるのもアレかと思うのですが、 大体こんな事ができるんじゃないかと思っています。 できるか分からない部分に関

    Vim script で Chrome Debugging Protocol を扱うライブラリを作りたい - Humanity
    emonkak
    emonkak 2018/02/12
  • 最近の Vim で入った面白 Vim script 関数 - Humanity

    :h eval.txt を眺めてたら結構色々関数追加されてるなーと思ったのでまとめてみた。 (追記: 結構古くからある関数も交じってた…) 基的に詳細な仕様は書くつもりはありません (古くなるかもしれないし help 見た方が正確)。 wordcount() g<C-g> を押すと現在のバッファのバイト数、文字数、単語数 (ビジュアルモードの時は選択されたバイト数、文字数、単語数も) を表示してくれますが、それを関数で取れるようにしたやつです getcharsearch() [tfTF] コマンド (例: f<char>) の情報を返してくれるやつです どの char を押したか、前方検索 or 後方検索、[tT] か [fF] かを返してくれます 要するに直前に [tfTF] コマンドのどれを使ったか、引数の char は何なのかの情報 eventhandler() イベントハンドラ中

    最近の Vim で入った面白 Vim script 関数 - Humanity
    emonkak
    emonkak 2018/02/12
  • Go のオプション引数で -v -v -v みたいに複数指定する方法 - Humanity

    mattn さんに教えてもらった。 いつもお世話になってて感謝しかない。 -d dir1 -d dir2 みたいな引数を持つオプションを複数指定する方法 Go の flag パッケージで複数オプションをパースするにはどうしたらいいんだろ。 -d dir1 -d dir2 で [dir1, dir2] の配列が取れるとうれしい— tyru (@_tyru_) 2017年8月22日 スライスに別型つけて Set を定義します。 https://t.co/VxA6wqU3ac— mattn (@mattn_jp) 2017年8月22日 package main import "flag" import "strings" type myDog []string func (dog *myDog) String() string { return strings.Join(([]string)(*

    Go のオプション引数で -v -v -v みたいに複数指定する方法 - Humanity
  • ミニマリストな Vimmer におすすめしたい履歴管理プラグイン oldfilesearch.vim - Humanity

    この記事は Vim Advent Calendar 2016 (その2) の 4 日目の記事です。 追記:oldfilesearch.vim のリポジトリへのリンクを貼り忘れていたので追記しました。 履歴管理プラグインへの懸念 履歴管理プラグインには様々なものがあります。 例えば MRU.vim であったり、unite.vim と連携する neomru.vim といったものがあります。 しかしこういった履歴管理プラグインは大体次のような処理を行います。 autocmd でファイルを開いた時にファイル名を記録する 履歴ファイルを作成してファイル名等の履歴を書き込む この方法だと autocmd を使うため Vim の動作が重くなる ファイルへの書込み処理にバグがあった場合、(ファイルの一覧を表示したり autocmd が実行された時点で) 動作が重くなったり、履歴が消えたりといった事が考えら

    ミニマリストな Vimmer におすすめしたい履歴管理プラグイン oldfilesearch.vim - Humanity
    emonkak
    emonkak 2016/12/07
  • やはり俺の AUTO INCREMENT を含むテーブルに対するリソースに PUT を使うのはまちがっている、または HTTP PUT の冪等性と AUTO INCREMENT の相性が最悪な件について (あるいは私が PUT を諦め POST を使うまで) - Humanity

    3行で伝える代わりにタイトルで説明してみた (親切心)。 (2016/07/30 2:45 追記) ちなみにコメント欄で指摘頂いた通り、今回問題視した PUT の設計も冪等と言えます。 私の冪等性の理解が間違っていたので、以下の冒頭の項目で説明する PUT の設計が RESTful じゃないと記載しているのは誤りです。 悩み DB の AUTO INCREMENT な値 (以下「連番」) をメッセージボディの JSON に含め、 そのリクエストを受け付けたバックエンドが DB の連番と比較し、 違っていればエラーを返すという設計の API があるとして、 PUT であるリソースを更新すると当然連番がインクリメントされるので連続で送ることができない。 つまり冪等性を保っておらず RESTful ではない。 では RESTful に実現しようとするなら一体どうすればいいんだろう?というので最近

    やはり俺の AUTO INCREMENT を含むテーブルに対するリソースに PUT を使うのはまちがっている、または HTTP PUT の冪等性と AUTO INCREMENT の相性が最悪な件について (あるいは私が PUT を諦め POST を使うまで) - Humanity
    emonkak
    emonkak 2016/07/23
  • balloon-evalを使ってマウス位置を取得 - Humanity

    ばよえ〜ん(訳:Vim Advent Calendar 2012への12回目の投稿です) この記事はVim Advent Calendar 2012の129日目の記事になります。 128日目は@aoisensiさんのSteamerだけどVim初めたいけど…って人のための記事でした。 とてもVim意識の高い記事ですね。 新しい事を始める人が多いこの時期、上記の記事を参考にしてぜひVimに挑戦してはいかがでしょうか。 さて、JavaScriptでは現在のカーソルの位置を取得したり、onmouseover/onmouseoutなどのイベントを使うなど、マウスの位置に応じて様々な操作を行うことができます。 こういった処理はVimでは実現できるのでしょうか? Vimはもともと端末で動くアプリケーションだったのだから、そのような処理は実装されていないのでは?と思われるかもしれません。 しかし、できるの

    balloon-evalを使ってマウス位置を取得 - Humanity
    emonkak
    emonkak 2013/05/22
  • hatena.vimの不満を解消する - Humanity

    アイスストーム!(訳:Vim Advent Calendar 2012への2回目の投稿です) アイスストームは3連鎖目の呪文だと突っ込まれました。 ぷよぷよよく知りませんがアルルって娘は僕っ娘でかわいいと思います。 初めましてこんばんは。tyruです。 この記事はVim Advent Calendar 35日目*1の記事です。 34日目は@masudaKさんの「Vimの環境を晒してみる(2013) - カイワレの大冒険」でした。 Vimユーザかつはてなダイアリーユーザの方に朗報です。 (残念ながらはてなブログには対応していません) 知っている方もいるかもしれませんが、今回紹介するのはhatena.vimというVimはてなダイアリーが更新できるVimプラグインです。(LinuxでもMacでもWindowsでも使えます) そのhatena.vimを使いやすくしてみたのでいっちょ便利設定を紹介

    hatena.vimの不満を解消する - Humanity
    emonkak
    emonkak 2013/01/07
  • 新しめのGitで使える細かい新機能 - Humanity

    バージョン 僕がビルドしたバージョンは $ git version git version 1.7.0.1.164.gbe2fで、新機能が使えないと言ってるバージョンは $ git version git version 1.6.3.3です。 最新版は git://git.kernel.org/pub/scm/git/git.gitから追うことができます。 git-rebase --interactive の reword, fixup git-rebase --interactive中のコマンドが何気に増えてました。 reword = use commit, but edit the commit message fixup = like "squash", but discard this commit's log message ということで、 rewordはコミットメッセージを編集

    新しめのGitで使える細かい新機能 - Humanity
  • 1