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

IDEショートカット対応表

$
0
0

様々なIDEの最新の対応表です。AndroidStudio3,Xcode9,Eclipse4.7,VisualStudio2017です。
自分用ですが、他の方にも役立つかと思います。

基本的にmacを想定していますが、Visual StudioだけはWindowsです。

Android StudioとIntellijは同じはずですが、全ては試していないのでAndroid Studioとしています。

Vimの欄は自分の.vimrcneobundle系の設定neocomplete系の設定を参考にしてください。

自分は、Editor処理は、それぞれのIDEのvimプラグインを利用しているで書いていません。(Xcode9からどうしよう・・・)

編集リクエスト大歓迎です。

デバッグ関連

機能名Android Studio3XCode9Eclipse 4.7Visual Studio2017(windows)vim (Ruby)
ビルドCmd + F9Cmd + BCmd + BCtrl + Shift + b
デバッグ起動Ctrl + DCmd + RCmd + F11F5
Step Over 次の命令に移動します。F8F6F6F10(pry-byebugの場合)n
Step Into メソッドの中に移動します。F7 ⁠F7F5F11(pry-byebugの場合)s
Step Out 今のメソッドから抜け,呼び出し元に移動します。Shift+F8F8F7Shift + F11(pry-byebugの場合)f
Run To Cursor カーソル位置まで処理を進めますAlt+F9右クリックでcontinue to hereCmd + RCtrl + F10
Resume Program 次のブレイクポイントまで処理を進めます。F9Cmd + Ctrl + YF8F5(pry-byebugの場合)f

主にコードを記述するときに使うショートカット

機能名Android Studio3XCode9Eclipse4.7Visual Studio(windows)vim
リファクタメニュー表示Ctrl + T何もないところでCtrl + ClickでRefactor選択Cmd + Alt + T
名前変更Shift + F6Cmd + Ctrl + E(スコープ内の名前のみ) リファクタはCmd + Clickでrename...選択Cmd + Alt + RCtrl + R を2回
自動インポートAlt + Ctrl + OCmd + Shift + OCtrl + R 後に Ctrl + g
自動フォーマットCmd + Alt + LCmd + A 後にCtrl + LCmd + Shift + F Ctrl + K 後に Ctrl + dsyntastic導入して,save時に行う
次の警告に移動F2 (F2+Shift)Cmd + ' だがJISキーボードでは利用できないので他に変えるCmd + .Ctrl + Shift + F12
ヒントを出すAlt + クリックCmd + 1
クイック修正Alt + EnterCmd + " だがJISキーボードでは利用できないので他に変えるCmd + 1Ctrl + .
コードスニペットメニュー表示Cmd + Alt + Tコードスニペットを追加することで可能Ctrl + K 後 Ctrl + S or Ctrl + X
コード生成メニュー表示Cmd + NCmd + Alt + SCtrl + K 後 Ctrl + X
documentコメント生成/** EnterCmd + Alt + /Cmd + Alt + J///入力
テストコード生成Cmd + Shift + T
大文字小文字変換Cmd + Shift + UショートカットなしShift + Cmd + (Y or X)Ctrl + Shift + U,Ctrl + Uvモードで u
ヒストリーpasteCmd + Shift + V
エディタタブ移動Cmd + Shift + ]Ctrl + TabCmd + ECtrl + Tab
パンくず にジャンプCmd + ↑Ctrl + 4 or Ctrl + 5 or Ctrl + 6

主にコードを読むときに使うショートカット

機能名Android Studio3XCode9Eclipse4.7Visual Studio(windows)vim
選択したコードのドキュメントを開くCtrl + JAlt + クリックvim-ref-ri導入 : Ref ri クラス名など(ruby)
選択したコードのドキュメントをポップアップで開くAlt + SpaceF2Alt + F12
クラス検索Cmd + O (or Shiftx2)Cmd + Shift + OCmd + Shift + t
ファイル検索Cmd + Shift + O (or Shiftx2)Cmd + Shift + OCmd + Shift + rCtrl + ,
シンボル検索Cmd + Alt + O (or Shiftx2)Cmd + Shift + OCmd + GCmd + Shift + F12ctags導入して Ctrl + ]
利用箇所表示Alt + F7, or Alt + Cmd + F7, or Alt + Cmd + Shift + F7Ctrl + Shift + Cmd + FShift + F12
メソッドの呼び出し箇所を検索Alt + Control + HCtrl + 1 後 caller選択Ctrl + Alt + h HCtrl + K 後 Ctrl + T
クラス・変数などの定義位置に移動Cmd + B(or Cmd + クリック)Cmd + Ctrl + クリックF3 (Cmd + クリック)F12 (Ctrl + -で戻る)Ctrl + ]
スーパークラスやインターフェイスに移動Cmd + UCmd + Ctrl + クリック
クラス実装に移動Cmd + Alt + BCtrl + TCtrl + F12
テストクラスに移動Cmd + Shift + T
クラスの構造表示Cmd + F12 or Cmd + 7Ctrl + 6Cmd + O
行番号に移動Cmd + LCmd + LCmd + LCtrl + G
編集位置に戻るCmd + Shit + DeleteCtrl + Q
戻る、進むCmd + [ , Cmd + ]Cmd + Ctrl + ←, Cmd + Ctrl + →(フリックが簡単)Cmd + [ , Cmd + ]Alt + Ctrl + ←, Alt + Ctrl + →Ctrl + O, Ctrl + I
関連ファイルに移動Cmd + Ctrl + ↑

その他

機能名Android Studio3XCode9Eclipse4.7Visual Studio(windows)vim
Find Action(機能を直接呼び出せる。)Cmd + Shift + AなしCmd + 3
Viewエリアの開閉Cmd + 1など , Shift + ESCCmd + 0, Cmd + Ctrl + 0, Cmd + Shift + Ynerdtreeを導入して、:NERDTreeToggle 自分はF2にしている
エディタのファイルとナビゲーションのパス同期Alt + F1 でenterCmd + Shift + J自動で選択Ctrl + Alt + lnerdtreeを導入して、:NERDTreeFind 自分はCtrl+Gを二回にしてる
Viewエリアの移動Ctrl + TabCmd + F7Alt + F7自分は、sjなどにしている

vimで使用するコマンド

$
0
0

概要

私が実践で使うテクニック集。

Vim

コマンド

概要コマンド
ページリセット:%d
ファイルの作成:ene
空白行の削除:v/./d
ペースト<s-ins>
ファイルを閉じる:q!

エラー: No devel block is defined for macvim (Mac)

$
0
0

vimのインストール中にエラーが出た(Mac)

No devel block is defined for macvim

手順

$ brew update
$ brew install lua
$ brew install macvim --devel --with-lua

3つ目のとこでエラー

解決策

$ brew install vim --with-lua

devel不要で通りました。

解決。

VimでCoffeeScriptのコンパイル結果を確認する

$
0
0

備忘録です。
Vim上でCoffeeScriptで書かれたコードのコンパイル結果を手っ取り早く確認する方法

:w!coffee -bcs

概要

CoffeeScriptのコマンドを確認

CoffeeScriptのREPLをNode.jsでインストールする。

$ npm -v5.3.0

$ npm install -g coffeescript

$ coffee -v
CoffeeScript version 2.0.0

Coffee コマンド - sappari wiki

オプション説明
-c, --compile.coffee を .js にコンパイル
-s, --stdio標準入力からcoffeeスクリプトを読んで、標準出力にJavaScriptを渡す。
-b, --bareトップレベル関数safety wrapper無しでコンパイル。

ざっと必要そうなものを取り出した。
結果は後述の実験を参照。

Vimのファイル出力の仕様

:help :w

:[range]w[rite] [++opt] !{cmd}

Execute {cmd} with [range] lines as standard input
(note the space in front of the '!'). {cmd} is
executed like with ":!{cmd}", any '!' is replaced with
the previous command |:!|.

以下雑な意訳

Vimは:w !{cmd}と入力すると、
任意のコマンドの標準入力に現在開いているファイルの文字列を投げ込んで実行できる。

また、頭に[range]という文字列があることから、
ビジュアルモードで選択した状態で:w !{cmd}と入力すると、
選択状態を示す:'<,'>w !{cmd}に自動保管され、選択部分を標準入力に渡すことも可能。

実験

以下のコードで実験を行う。

emit = (type, {msg}) ->unlesstypeis"verbose"thenreturnconsole.log"done"expect(msg).to.equal"not found ticket"

標準入力から実行したいので、まずは-sオプションのみをつけて実行。

:'<,'>w!coffee -s

何も表示されず……

他のコードで試したところ、ReferenceError: hoge is not defined等のエラーが表示された。
どうやら-sオプションのみ利用した場合はJavaScriptに変換後、評価を行っているようだ。

実行結果が見たいだけなら-sオプションのみで解決だが、
今回確認したいのはコンパイルされたJavaScriptなのでコンパイルを明示する-cオプションを併用して実験を継続。

:'<,'>w!coffee -sc// Generated by CoffeeScript 2.0.0(function() {
  var emit;

  emit =function(type, {msg}) {if(type !=="verbose") {return;
    }
    console.log("done");return expect(msg).to.equal("not found ticket");
  };

}).call(this);

見事コンパイルに成功し、JavaScriptのコードが表示された。
ただし、(function() {}).call(this);が足されて読みづらいので、もっと読みやすくしたい。
そこで、更に-bオプションを含めて実行する。

:'<,'>w!coffee -bcs// Generated by CoffeeScript 2.0.0
var emit;

emit =function(type, {msg}) {if(type !=="verbose") {return;
  }
  console.log("done");return expect(msg).to.equal("not found ticket");
};

コードが簡素になり読みやすくなった。
従ってVimで一部の箇所のコンパイル結果を確認したい場合は、
ビジュアルモードで選択して:w !coffee -bcsとタイプすれば良い。

vimにはマッチするけどemacsにはマッチしないvimmer的正規表現

$
0
0

vimで検索していたA氏はふと考えた。

vimとemacsの論争。
vimはモードの概念がある。
emacsはOSと呼ばれるほど多機能である。

vimは含むけどemacsは含まない行が欲しい!」

つまり、2行目だけを取り出したいとする。
まずは解答。

/\v^(.*vim)@=(.*emacs)@!.*$

前置き

  • vim使いである
  • 基本的な正規表現を知っている
  • vimで検索時に\vを付け、verymagicを有効にする
    • いちいち(などをエスケープするのが大変なため

たとえば、

/\v^a[iue]o$

が何をしているかわかれば大丈夫。

aio
auo
aeo

にマッチします。

以降、/\vは省略。

本題

テストに使う文字列は以下。

mac
tac
cam
miv
emacs
vi
vim
elvim

前にviがあるmにマッチさせる

vim
elvim

mにマッチさせたい場合。

肯定後読みを利用。

(vi)@<=m

これで、手前にviがある場合のみmにマッチする。
()でくくり、次に@<=を付ける。
よく使うパターンだし、長いので、\zsという書き方が用意されている(sstart)。

vi\zsm

前にviがないmにマッチさせる

否定後読みを利用。

mac
tac
cam
miv
emacs

の各mにマッチ。

(vi)@<!m

=!に変えたら否定。

次にmが続くviにマッチさせる

今度はviを抽出したい。

vim
elvim

viにマッチ。
こういうときは肯定先読みを利用。

vi(m)@=

後読みのときの<が消え、マッチング対象の後ろに来た形。
これもよく使うので、

vi\zem

\zeで修飾できる(eend)。

次にmが続かないviにマッチさせる

マッチ対象は以下。

vi

肯定先読みの=!に変えて否定の意味にするだけ。

vi(m)@!

ちゃんとvimelvimは結果から除外されている。

vmを含む行にマッチさせる

ここからが本番。
一般的なweb検索のようにand条件でマッチングさせたい場合。

^(.*v)@=(.*m)@=.*$

ちょっと複雑だけど、肯定先読みがポイント。

最初の^を読み取るとき、その後に「なんちゃらv」「なんちゃらm」が含まれているかどうかをチェック。
条件を満たしていたら.*$の部分にマッチ。

この条件では、

miv
vim
elvim

の行全体にマッチする。
mivmvが逆だが、問題ない。

vmを含む行にマッチさせる

今度はor検索。
andとは違って基本的な正規表現だけで書ける。

^.*(v|m).*$

文字列中にvmがあるかどうかをチェックしているだけ。

mac
cam
miv
emacs
vim
vi
elvim

にマッチする。

なお、vmも1文字なので、文字セットを利用して、

^.*[vm].*$

と書いても同じ。

vmも含まない行にマッチさせる

vmを含む行にマッチさせる」を反転させたもの。

^(.*v)@!(.*m)@!.*$

=!に替わっているだけ。

なお、検索対象が1文字だけなら、文字セットを利用して、

^[^vm]*$

と書ける。

vがあるがmがない行にマッチさせる

vi

にマッチする正規表現。

ここまできたら今までの応用で、

^(.*v)@=(.*m)@!.*$

と、v側は肯定、m側は否定にすればいい。

また、例のごとくmが1文字なのを利用して、

^(.*v)@=[^m]*$

とも書ける。

終わりに

「vimの行だけ見たいんや、emacsは目に入れたくないんや!」というときは、
おもむろに、

/\v^(.*vim)@=(.*emacs)@!.*$

と入力しよう。
vimだけが含まれている行がハイライトされる。
言い忘れていたけれど、私はemacs好きですよ。

……なお、これはvimじゃなくても肯定先読み、否定先読みができればOK。

たとえばperl正規表現の-Pオプションが使えるLinuxのgrepでは、

$ grep -P -r '^(?=.*\Walias\W)(?=.*\Wls\W).*$'# \W は単語区切り

とやれば、「lsに対してaliasを設定している行だけ」を抽出できる。
まるで検索エンジン!

$ grep -r 'alias'| grep 'ls'$ sed '/emacs/d'

とかはシェル芸に踏み込んでしまうのでここまで。

[Vim colorscheme]molokaiやapprenticeが使えるのにhybridが真っ白になる時の解決法

$
0
0

なぜhybridだけ真っ白?

それは、hybridだけt_Coが256以上である条件のif文がないから。
(ぜひ以下の3つでt_Coを検索してみてください)

molokai
apprentice
hybrid

解決法

set t_Co=256を書くだけ。

.vimrc
sett_Co=256setbackground=darkcolorscheme hybrid

fzfを活用してTerminalの作業効率を高める

$
0
0

はじめに

今回は作業効率化をすすめるにあたって有用なfzfの利用例を紹介したいと思います。
似たようなものでpecoというのもありますが、fzfの記事が少ないと思うので、今回はfzfについて書いていきたいと思います!

(あとfzfはVimでも使えるようにサポートされているので、Vimmerの方はpecoよりもfzfかなということもあり…。)

fzfとは

fzf
https://github.com/junegunn/fzf

fzfとはCLIでインクリメンタルに曖昧な検索が可能になるGO言語製のツールです。
標準出力をパイプでfzfコマンドで渡すだけで、標準出力の内容を対象に検索できます。

$ find . | fzf

スクリーンショット 2017-10-19 22.02.46.png

上部の入力箇所でインクリメンタル曖昧検索しながら、(CLIとしては慣れ親しんだキーバインドの)Ctrl-n,Ctrl-pで下部のリストから選択することができます。

最初は『検索できるだけで、何が便利やねん』という感想を持たれた方も多いかと思いますが、CLIの環境において選択的インターフェースの提供は、工夫次第でかなり強力になります。

まずはfzfをインストールしましょう

fzfのインストール記事は他にいくらでもあるので割愛します。
たぶんこちらとかの記事を参考にすると良さそうです

ちなみに私の設定っぽい設定は今のところこれだけです。(←zsh)

.zshrc
[ -f ~/.fzf.zsh ]&&source ~/.fzf.zshexportFZF_DEFAULT_COMMAND='rg --files --hidden --glob "!.git"'exportFZF_DEFAULT_OPTS='--height 40% --reverse --border'

fzfでヒストリー検索

さて、fzfをちゃんとセットアップできたら、まずはコマンドヒストリーの曖昧インクリメンタル検索を使ってみましょう。

デフォルトのヒストリー検索よりも、一覧を見ながらかつ柔軟に検索できるようになるので、一度使い始めるとデフォルトのコマンドヒストリー検索には戻れません。

スクリーンショット 2017-10-19 22.45.13.png

参考:本家README.md
https://github.com/junegunn/fzf#key-bindings-for-command-line

fzfで実装する便利関数

さて早速、作業効率化を進めていきましょう。
まず何をすればよいかわからない方は、サンプルの宝庫である本家Wikiを見るのがおすすめです。
https://github.com/junegunn/fzf/wiki

ここではいくつか本家Wikiにある便利関数を紹介します。

fbr

下記のような記述を.bashrcや.zshrcなどに書きます。

# fbr - checkout git branch
fbr() {
  local branches branch
  branches=$(git branch -vv) &&
  branch=$(echo "$branches" | fzf +m) &&
  git checkout $(echo "$branch" | awk '{print $1}' | sed "s/.* //")
}

fbrコマンドで今ローカルに存在するbranchを選択して切り替えられるようになります。

スクリーンショット 2017-10-19 22.13.42.png
※サンプルはvimのaleのgitリポジトリが丁度良さそうだったので勝手に使わせていただいています(私自身は全く貢献してません…)

※ 本家Wikiに書いてあるサンプルは基本的にfzf+(git) branch = fbrみたいなネーミングのノリです。

さぁ、どんどん行きましょう。

fbr

またしてもfbrという名前がついているのですが、今度はリモートブランチを含めた検索です。

fbr - checkout git branch (including remote branches)
fbr() {
  local branches branch
  branches=$(git branch --all | grep -v HEAD) &&
  branch=$(echo "$branches" |
           fzf-tmux -d $(( 2 + $(wc -l <<< "$branches") )) +m) &&
  git checkout $(echo "$branch" | sed "s/.* //" | sed "s#remotes/[^/]*/##")
}

スクリーンショット 2017-10-19 22.21.24.png

個人的にはfbrm(fzf+branch+remote)って関数名にしてfbrとは分けて使ってます。

fshow

# fshow - git commit browser
fshow() {
  git log --graph --color=always \
      --format="%C(auto)%h%d %s %C(black)%C(bold)%cr" "$@" |
  fzf --ansi --no-sort --reverse --tiebreak=index --bind=ctrl-s:toggle-sort \
      --bind "ctrl-m:execute:
                (grep -o '[a-f0-9]\{7\}' | head -1 |
                xargs -I % sh -c 'git show --color=always % | less -R') << 'FZF-EOF'
                {}
FZF-EOF"
}

スクリーンショット 2017-10-19 22.33.03.png

git log の--graphオプションもfzfに突っ込んでしまえば、立派なインターフェースの出来上がりです。
Enterでgit showの状態になります。

fd

もうちょっと簡単な例を見てどうやってカスタマイズしていけばいいか理解を深めてみましょう。

fdはfindコマンドで下層までをリスト化し、標準出力をパイプでfzfに渡し、最後にcdコマンドに結果を渡しているだけということがわかります。

# fd - cd to selected directory
fd() {
  local dir
  dir=$(find ${1:-.} -path '*/\.*' -prune \
                  -o -type d -print 2> /dev/null | fzf +m) &&
  cd "$dir"
}

スクリーンショット 2017-10-19 23.04.50.png
(※個人的にfcdって名前にしてみましたがあんまり使ってません…。)

なるほど、これなら自分でも実装できそうです。

自分が使っているfzfの例

git worktreeコマンドは皆さんお使いでしょうか。僕も最近使い始めて見たのですが、マルチタスクな日は便利すぎてかなりお世話になっています。
参考: ブランチの切り替えをしなくてよくなるコマンド git worktree がすごい!

でも、worktreeで作成したブランチまで移動するのがだるすぎる…。
ということでfzfを使って作業効率化してみます。

# worktree移動function cdworktree(){# カレントディレクトリがGitリポジトリ上かどうか
    git rev-parse &>/dev/nullif[$? -ne 0];thenecho fatal: Not a git repository.returnfilocalselectedWorkTreeDir=`git worktree list | fzf | awk '{print $1}'`if["$selectedWorkTreeDir"=""];then# Ctrl-C.returnficd${selectedWorkTreeDir}}

スクリーンショット 2017-10-19 23.16.56.png

選択した候補のpath部分をcdに渡して階層を移動しています。
長ったらしい関数名ですがcdw(tabキー)みたいな感じで使ってます。

Vimで使う

自分は普段使いのエディタがVimなのですが、Vimでfzfが使えるようにサポートされているところがpecoではなくfzfを使う理由の一つです。

そして本家でもvimプラグインとしても提供されています。
https://github.com/junegunn/fzf.vim

Ctrl-Pのようなファイル検索

大きいプロジェクトだとCtrl-pよりも遥かに高速です。

" [Replace of Ctrl-p] ========================================" nnoremap<C-p> :FZFFileList<CR>
command! FZFFileList call fzf#run({
            \ 'source': 'find . -type d -name .git -prune -o ! -name .DS_Store',
            \ 'sink': 'e'})

MRU(Most Recently Used)

よくあるMRUのFZFインターフェース化

" [MRU] ========================================"
command! Fmru FZFMru
command! FZFMru call fzf#run({
            \  'source':  v:oldfiles,
            \  'sink':    'tabe',
            \  'options': '-m -x +s',
            \  'down':    '40%'})

QuickFixの検索

なにかQuickFixに送って開かせるつもりだったもの(あまり使ってない)。

" [QuickFix] ===================================" 
command! Fq FZFQuickfix
command! FZFQuickfix call fzf#run({
            \  'source':  Get_qf_text_list(),
            \  'sink':    function('s:qf_sink'),
            \  'options': '-m -x +s',
            \  'down':    '40%'})" QuickFix形式にqfListから文字列を生成するfunction! Get_qf_text_list()let qflist = getqflist()let textList = []foriin qflistifi.validlet textList = add(textList, printf('%s|%d| %s',
                \       bufname(i.bufnr),
                \       i.lnum,
                \       matchstr(i.text,'\s*\zs.*\S')
                \   ))endifendforreturn textListendfunction" QuickFix形式のstringからtabeに渡すfunction! s:qf_sink(line)let parts = split(a:line,'\s')
    execute 'tabe ' . parts[0]endfunction

Qiitaなどで紹介されているfzf活用例

fadd

gitのdiff, addをfzf でインタラクティブに

Gitのunstageなファイルを選択してどんどんstageに移せます。
個人的には特に大きいプロジェクトではtig開くよりも軽いし、かなりおすすめです。

まとめ

個人的にはfzfはシンプルかつVimサポートもあり、お陰様でCLI生活を豊かにしてくている(たぶん)ので好きです。

pecoもfzfも使ったことなかったよって人は、内容的にはbash(zsh)の部分に関してはpecoでもfzfでも同じことができると思うので、まずは自分で比較してみて好きになれそうな方を使ってみるのがおすすめです👍

Vimでキャメルケースのスペルチェックをするプラグインを作った 〜 CCSpellCheck.vim 〜

$
0
0

Vimでスペルチェック

Vimでもデフォルトで英単語のスペルチェックの機能は提供されています。

ただ、単にそれらを有効にするだけで、スネークケースのようにアンダースコア(_)で区切られた変数名はチェックできるのですが、キャメルケースのような区切り文字がないような変数名がチェックできないという問題がありました。

コードレビューでTypoの指摘をされるのを減らしたいのですが、やはりどんなに注意しててもTypoはあるものなので、凡人たる私は人力に頼らず自動でチェックしたいところです。

大抵、デフォルトに無い機能はVimのプラグインを探せば見つかる事が多いですが、今回は結構探したつもりなのですがそういったプラグインが無さそうなので、良い機会なので作ってみました。

CCSpellCheck.vim

今回作成したVimプラグインはこちらです。
https://github.com/kmszk/CCSpellCheck.vim

利用イメージ:CaseをCeseとtypoした場合
スクリーンショット 2017-10-21 23.08.19.png

ざっくりとした仕様説明

  1. Vimのspellを部分的に利用していますが、機能的には別のものになっています。
  2. スペルチェックのタイミングはBufWinEnter,BufWritePostなので、基本的にはファイルを開いたタイミング、保存したタイミングになります。
  3. 単語のチェックにspellbadword()を使っているので、VimのSpell機能の辞書、spellfile、internal-wordlistを利用しています。
  4. spellfileに単語を登録するために、zgやzwを利用したコマンドを用意しています。 (詳しくはコマンドの項目参照)
  5. spellsuggest()を利用した修正候補からのコードの修正ができます。

インストール

NeoBundleならインストールは下記の通りです。

NeoBundle 'kmszk/CCSpellCheck.vim'

セッティング

今のところ、設定項目は以下の通りです。
すべて設定しなくてもデフォルトの設定で動きます。

" スペルチェックを有効(1)/無効(0) 。(デフォルト 1)letg:CCSpellCheckEnable =1" 何文字以上の文字数の単語を対象にするか。(デフォルト4)" 例:4 なら getHogeIdという単語のうちの Hogeだけがチェックの対象になります。letg:CCSpellCheckMinCharacterLength =4" 修正候補列挙時の列挙数 (デフォルト 50)letg:CCSpellCheckMaxSuggestWords =50" highligheで利用できるグループ名の設定 (デフォルト 'CCSpellBad')letg:CCSpellCheckMatchGroupName ='CCSpellBad'" highlightの設定の上書き設定 (デフォルト cterm=reverse ctermfg=yellow gui=reverse guifg=yellow)highlight CCSpellBad cterm=reverse ctermfg=magenta gui=reverse guifg=magenta

利用できるコマンド

修正候補の選択

Normalモードで単語の上にカーソルをおき、下記のコマンドで一覧が開きます。
(Vimのspellsuggestのz=に相当)

Z=

スクリーンショット 2017-10-21 23.28.18.png

左端の番号を入力して選択します。(デフォルトのz=と一緒)

※ ハイライトされていない単語でもコマンドを実行すれば候補が表示されます。

単語の登録

上記の画像の例のようなStrlenは正しい単語としてほしいですので正しい単語としてvimに登録しましょう。
spellfileに単語を登録するために、zgやzwを利用したコマンドを用意しています。
いずれも、visualモードで登録したい単語を選択した状態で、次のコマンドを入力します。

" 正しい単語として登録
Zg" 正しくない単語として登録
Zw" 正しい単語リストから削除
# => zug
Zug" 正しくない単語リストから削除
# => zuw
Zuw" 以下、internal-wordlist(一時的に有効なリスト)に登録" 正しい単語として一時的に有効なリスト登録
ZG" 正しくない単語として一時的に有効なリスト登録
ZW" 一時的に有効な正しい単語リストから削除
ZUG" 一時的に有効な正しくない単語リストから削除
ZUW

正しい単語として登録する例
登録したい選択範囲をVisualモードで選択し、
スクリーンショット 2017-10-21 23.03.39.png

Zgを押下
スクリーンショット 2017-10-21 23.03.15.png

プラグイン作成中の紆余曲折的なお話

単語チェックを何でチェックするか

最初にLinuxでスペルチェックをする方法をぐぐったところ、Aspellというのがあったので開発初期はAspellでチェックさせたりしてました。
確か、修正候補の単語リストがほしい形で取れなかったのと(うろ覚え)、Aspell用のチェック用単語リストが必要になること、そもそもAspellをインストールしなければいけないことが微妙だなと思い始めた矢先、Vimのデフォルトのスペルチェックでギリギリ実装可能っぽいことがわかり、Aspellでのチェックをやめました。

スペルチェックのタイミング

今は基本的にファイルを開くタイミングと、保存するタイミングでチェックが走ります。
このタイミングで走らせるとなると、開いているバッファの単語をすべてチェックすることになるので、一見、筋が悪そうです。

画面がスクロールするタイミングで表示範囲だけチェックすれば対象となる単語数がかなり減りそうですが、チェックの処理が意外と時間がかかり、スクロールに支障がありました。多分、単語チェック度にspellfileのファイル読み込みがあるっぽいような(詳しく調べてない)。
(あと、spellfileに単語が多くなると、書き込みにも時間がかかるっぽいです。)

Vimでスクロールにストレスがあるのは致命的だなと思ったので、Vimの中では『待つタイミング』である開く/保存のタイミングに混ぜてしまったほうがストレスが自分としては少なかったので、これで採用しました。

まとめ

今回、初めてVimscriptを一から書きました。
書く準備としてはVim-script-テクニックバイブル-を読みました。plugin作成するためのお作法とか書いてあったりして、大変お世話になりました。

Vimはやはり機能を自分で拡張しやすいのがいいですね。プラグイン作ることでvimの理解も深まりますし、プラグイン作成で得られた知識は.vimrcにちょっとしたこと書くときにも使えますし。

そして、しばらくテスト運用として仕事で使うVimにプラグインを入れて使っていたのですが、狙いである方のTypoは無事に減らすことが出来ました。また、意外とチームでtypoしているというのがよく見えるようになりました。元は自分がコードレビューで指摘されるのを減らす目的でしたが、やっぱり人力にはある程度限界があるなと思いました。

…あと、もしかしたら使ってくれる人がいたとして、誰かの.vimrcにkmszkの名前が記される事となることを考えると、ちょっとテンション上がりますね。いや、本当に使ってくれる人がいたらですけど。


vi bind

$
0
0

command mode

行移動

コマンド動作覚え方?
0行先頭数字の最初
^行先頭なんとなく?
$行末端なんとなく?
+下行先頭行を+方向に
-上行先頭行を-方向に

画面移動

コマンド動作覚え方?
Ctl u半画面上up
Ctl d半画面下down
Ctl b1画面上back
Ctl f1画面下foword
ggファイル先頭go back?
Gファイル末端go?
{前段落?
}後段落?

単語移動

コマンド動作覚え方?
w単語分移動word
b単語分戻るback word
e単語分移動。カーソルは末端end word
ge単語分戻る。カーソルは末端end word?

Vimのカーソル移動を10倍速くする

$
0
0

これを設定ファイルに書くだけ!

設定ファイルは自分で特に何も変えてなければ~/.vimrcにあるはず。
なくても作れば勝手に読まれるはず。

nnoremap<S-k>10<UP>nnoremap<S-j>10<DOWN>nnoremap<S-h>10<LEFT>nnoremap<S-l>10<RIGHT>vnoremap<S-k>10<UP>vnoremap<S-j>10<DOWN>vnoremap<S-h>10<LEFT>vnoremap<S-l>10<RIGHT>

これを反映してカーソル移動をh, j, k, lではなくてH, J, K, Lで行うと、カーソルがいつもの10倍動きます!!

15085980506lzwCv0EmkoWHCi1508597909.gif

以下蛇足

設定内容

nmapnormalモードの、vmapvisualモードのキー設定を示していて、<S-k>shift + kを意味しています。
<UP>はカーソルを上に動かすことを意味していて、vim は数字を付けるとその回数分繰り返されるので10<UP>でカーソルが 10 動きます。

設定ファイルを書かなくても、普通に vim を起動してnormalモードで15jとかやれば下に 15 カーソルが動きます。
それだけです。

これの強力さ

少し意識して vim を使う様にすると、案外1単語足したい消したいとか()の中だけ消したいとかが自然と出来る様になります。

例えば本当によくある操作として

  • public void foo(...staticを入れてpublic static void foo(...にしたい
  • String foo(String x)の引数を消してString foo()にしたい

とかがあります。

これって一例ですけど

  • publicのどこでも良いからカーソルを乗せる -> eと押すとカーソルがpubliccの部分に行く -> aでカーソルの右に字を書く(つまりe, a
  • voidのどこでも良いからカーソルを乗せる -> bと押すとカーソルがvoidvの部分に行く -> iでカーソルの左に字を書く(つまりb, i
  • (String x)のうちカーソルをとりあえず()の中に移動する -> di(で括弧の中を全部消す

みたいな操作でスカっと出来ちゃいます。本当です。

vim は単語や括弧の中身を扱ったり最寄りの半角スペースまで云々とかがものすごい得意なので、カーソルは割と雑に合わせても処理の起点として全然問題にならないからです。

なんで 10 か

いろいろ試してそうなっただけ。

ただ横移動は上にあるようにテキトーに単語に乗れば良いので、5 だとちょっと足りなかった。
イメージとしてはxxxxxxx yyyyyyy zzzzzzzで先頭からL, Lとして全単語に1度ずつ乗るくらいにしたかった。

上下移動は 4 行くらいなら目測でわかるから4kとか出来るし、それよりパッと見大きければKしてjjjとかすれば良い。

だから上下とも 10 が丁度良かった。

本来のH, J, K, L

本来のコマンドを潰してることになるので一応ふわっと解説。
ちなみにtab h Hとかやるとマニュアル開くよ。

  • H -> カーソルが vim に映ってる範囲の一番上に行く感じ
  • J -> カーソル行の改行を無くして下の行と連結する感じ
  • K -> マニュアルを開く感じ
  • L -> カーソルが vim に映ってる範囲の一番下に行く感じ

個人的には全部潰して良いので問題なし

vimにmolokaiを設定する

$
0
0

はじめに

vimのカラースキーマをmolokaiに設定する手順です。忘れることが多いので手順にしました。

前提条件

  • gitコマンドが利用できること

手順

githubからmolokaiを取得する。

[root@ca035c198d1f ~]# git clone https://github.com/tomasr/molokai.git molokai
Cloning into 'molokai'...
remote: Counting objects: 148, done.
remote: Total 148 (delta 0), reused 0 (delta 0), pack-reused 148
Receiving objects: 100% (148/148), 26.92 KiB | 0 bytes/s, done.
Resolving deltas: 100% (35/35), done.

molokaiディレクトリを.vimに変更する。

[root@ca035c198d1f ~]# mv molokai/ .vim
[root@ca035c198d1f ~]# ll -a
total 64
dr-xr-x--- 1 root root 4096 Oct 22 02:56 .
drwxr-xr-x 1 root root 4096 Oct 17 13:04 ..
-rw------- 1 root root 1513 Oct 17 15:07 .bash_history
-rw-r--r-- 1 root root   18 Dec 29  2013 .bash_logout
-rw-r--r-- 1 root root  176 Dec 29  2013 .bash_profile
-rw-r--r-- 1 root root  176 Dec 29  2013 .bashrc
-rw-r--r-- 1 root root  100 Dec 29  2013 .cshrc
drwxr----- 3 root root 4096 Oct 22 02:54 .pki
-rw-r--r-- 1 root root  129 Dec 29  2013 .tcshrc
drwxr-xr-x 4 root root 4096 Oct 22 02:54 .vim
-rw------- 1 root root 6221 Oct 21 09:32 .viminfo
-rw-r--r-- 1 root root   86 Oct 19 13:30 .vimrc
-rw------- 1 root root 3407 Sep 11 15:53 anaconda-ks.cfg
-rw------- 1 root root 3221 Sep 11 15:53 original-ks.cfg
drwxr-xr-x 3 root root 4096 Oct 21 09:32 work

.vimrcにカラースキーマを設定する。.vimrcは、ホームディレクトリにあります。.vimrcがない場合は作成してください。

1 syntax on
2 colorscheme molokai
3
4 set number
5 set cursorline
6 set showmatch
7 set laststatus=2
8
9 set expandtab
10 set tabstop=2

余計な設定まで入っていますが、1行目と2行目のみで問題ないです。

追記

カラースキーマの設定方法についてご指摘をいただきましたので、カラースキーマの設定方法について追記いたします。

gitから取得したディレクトリ(今回は、molokai)を.vimにリネームしていますが、ディレクトリを修正せずに、.vimrcにruntimepathを追加することで設定を反映することが可能です。

runtimepathについては、以下に詳細があります。
runtimepath

  1 set runtimepath+=~/molokai
  2
  3 syntax on
  4 colorscheme molokai
  5 以下、省略

vim のシンタックスハイライタを作るときに参考にしたサイト

vim使ってるのにvimium使わないなんてもったいない!

$
0
0

vimiumとは

https://github.com/philc/vimium

vimキーバインドでGoogle Chromeやfirefoxを使えるようにできるプラグインです
カスタムすれば、マウス操作なしでウェブブラウジングする事が可能です!

vimiumができること

jkで上下スクロール

jkjkjk720.gif

fiでリンクを表示して遷移する

link720.gif

できる事一覧(基本)

?       使い方を説明してくれる
h       左へスクロール
j       下へスクロール
k       上へスクロール
l       右へスクロール
gg      一番上へスクロール
G       一眼下へスクロール
d       半ページ下へスクロール
u       半ページ上へスクロール
f       現在のタブでリンクを開く
F       新しいタブでリンクを開く
r       更新
gs      view sourceを表示
yy      URLをコピーする
yf      リンク作のURLをコピーする
...その他いろいろ

カスタムするとさらに便利に!!

l右スクロールとh左スクロールはいらないので、戻ると進むに書き換える

- chromeの右上にvimiumボタンのoptionsをクリックする

スクリーンショット 2017-10-25 21.52.34.png

  • custom key mappingsへカスタムしたい内容を入力する
  • ペーストするとこんな感じになります。
# 戻る
map h goBack
# 進む
map l goForward

# その他おすすめオプションもどうぞ
map H previousTab
map L nextTab
map i LinkHints.activateMode
map I LinkHints.activateModeToOpenInNewTab

スクリーンショット 2017-10-25 21.41.53.png

  • 最後にsaveを押すと反映されます!!

戻ると進む

backback720.gif

これだけでもめっちゃ便利です!!!

インストール方法

まとめ

  • 今の私には欠かせないChrome拡張です!!
  • firefoxのもありますが、動きが少々鈍い?のでchromeでの使用がおすすめです!!

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

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

#でprintを検索

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

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

vimメモ

$
0
0

vimに関するメモ

MacでUbuntuをリモート中にキーボード入力が上手くいかない

おそらく文字コードの違いでバックスペースなどがCとかDになっちゃう
ホームディレクトリに次のファイルを作る

vi ~/.vimrc

中に次の行をいれる

setnocompatible

これで設定終了! 次のコマンドで設定を反映させる

source ~/.vimrc

これで治るはず


Vim コマンド

$
0
0

iでその場でインサートモード
aで直後の文字にインサートモード
:wqで保存終了
:q!で保存せずに終了
xでカーソル下の文字を削除
Ctrl + C 終了
/で検索
ggで最初の行、Gで最終行にジャンプ
u 元に戻す
o 改行&インサートモード
* 単語を検索して全部ハイライト
* nで次の検索結果、Nで前の検索
* ea 次の単語の直後でインサートモード
* gg=G インデント整理

ubuntu16.04でplay2-scalaのvim開発環境を作成したときのメモ

$
0
0

まずは初めにactivatorをダウンロード

以下からactivator.zipをダウンロードする。
- https://downloads.typesafe.com/typesafe-activator/1.3.12/typesafe/activator-1.3.12.zip)

ダウンロード後、任意のディレクトリに解凍すれば良いらしいが、ルート権限が必要な場所に解答してはイカンらしいので、今回はホーム下に.activatorディレクトリを作成して解凍。

そしてPATHを通してhelpで動作確認。

echo 'export  PATH="$HOME/.activator/activator-dist-1.3.12/bin:$PATH"' >> ~/.profile
source ~/.profile
activator -help

終わったら起動してlocalhost:9000をブラウザで開いてみる。

activator new sample-app play-scala
activator
run

activatorとrunの後はやたらと時間がかかるが気長に待つ。

vimにscalaとplayのシンタックスハイライトを導入する

で、ここからは何で開発を進めるかだが、eclipseかintelliJが統合開発環境では対応してるらしいけど、とりあえず困るまではvimで頑張ってみる。

てことで、vimにscalaのシンタックスハイライトを導入する。
調べると以下のGitHubが使えそう。(よく読むとシンタックスハイライト以外にも便利機能がついてくるのか?それについてはまた今度ゆっくり確認しよう)
- https://github.com/derekwyatt/vim-scala

vimのプラグインマネージャーであるdein.vimは導入済みなので、以下を.vimrcに追加する。

  call dein#add('derekwyatt/vim-scala')

これでfiletypeがscalaのファイルに関してはシンタックスハイライトされるようになったが、playのscala.htmlファイルにについては未だシンタックスハイライトされていない。

シンタックスの問題だけならともかく、このままではhtmlファイルと認識されているので->とかがエラー扱いになって非常にうっとおしい。

てことで、play用の.vimを探していたところ、以下が見つかった。
- https://github.com/gre/play2vim

さっそく.vimrcに設定を追加して導入。

  call dein#add('derekwyatt/vim-scala')
  call dein#add('gre/play2vim')

無事、scala.html、routes、application.confがハイライトされました。

Mac上でVimをGUIアプリのように起動する

$
0
0

Vimビギナーの課題

vimを使い始めたいけど、Finder上でファイルを触ることが多く、そこからTerminal→vim起動だと手間が多く、挫折が多い。手軽に起動できる環境が欲しい。
「Dock上のアイコンクリックでvim起動。テキストファイルをダブルクリックでvim上で開く」などGUIのテキストエディタのように起動したい。

環境

OS X El Capitan 10.11.6
Automator Version 2.6

解決法

Automatorを用いて、Terminal上のVim起動をアプリ化する。

1. Automatorを起動,⌘+Nで新規でAppliationを作成

ファイル名はVimLauncherとかで。
Screen_Shot_2017-10-31_at_02_34_25.png

2. 検索バーからrunと検索、ダブルクリックでRun Applescriptを右のワークフローに追加

Screen_Shot_2017-10-31_at_02_37_29.png
今回はApplescriptでターミナルを起動、スクリプトを実行させますが、これはJavascriptでも記述可能です。こちらで書きたいなら、Run Javascriptをワークフローに追加しましょう(コードはご持参ください)。このコードはmac標準アプリのScript Editorでコーディング、実行できて、試すには良いです。

3. テキストボックスに以下を貼り付け

on run {input}
    if input is {} then
        set cmd to "vim"
    else
        set the_path to POSIX path of input
        set cmd to "vim " & quoted form of the_path
    end if
    tell application "System Events" to set terminalIsRunning to exists application process "Terminal"
    tell application "Terminal"
        activate
        if terminalIsRunning is true then
            do script with command cmd
        else
            do script with command cmd in window 1
        end if
    end tell
end run

今回起動アプリはvimとなっていますが、僕はnvimに書き換えneovimを起動しています。最初のif文でinputであるファイルパスが渡されたかどうかを分岐しています。inputがなければ純粋にvimを起動します。tell application "System Events"の意味はよくわからないままのコピペです。

4. 保存してapp化し、/System/Library/Applicationsに追加

5. Dockに追加やテキストファイルのダブルクリックvim起動化

Dockに追加は、appファイルをDockにドラッグで。テキストファイルのダブルクリックvim起動化は、そのテキストファイルを「右クリック→情報を見る」で起動アプリを選択します。「Change All」を選択でその拡張子のファイルはすべて選択したアプリで起動されます。

Screen_Shot_2017-10-31_at_03_38_35.png

おまけ

アプリなんだからアイコンがデフォルトのままは嫌ですね。
これは変更は可能です。最高のアイコンにしちゃいましょう。

Screen_Shot_2017-10-31_at_02_57_32.png

  1. 好きな画像をpngで作ります。常識的に背景は透過にしましょう。
  2. https://iconverticons.com/online/でアイコンに変換しダウンロード
  3. ダウンロードしたファイルを右クリック→「情報を見る」でポップアップ。左上のアイコンを選択しコピー
  4. アイコンを変えたいアプリを右クリック→「情報を見る」でポップアップ。左上のアイコンを選択し貼り付け。

参考

 

新しい環境で美しいvimが動くまでのメモ

$
0
0

転職して新しい環境でPCセットアップ。
Windows環境なのでまずはTerminalから整えねばならない Macでええやん

Shell環境

cmd.exeやPowershellを使うと蕁麻疹が起きる体質なので必須です。Macのターミナルでええやん

MSYS2を使っています。
cygwinやgit for windows、windows10環境ならBash on Ubuntu on Windowsなど他にも選択肢は色々あります。

MSYS2
http://www.msys2.org/

フォント

游ゴシックに村を焼かれたのでフォントも必要です。
プログラミング向けフォントRictyを採用します。

このあたりを参考に↓
https://qiita.com/mashumashu/items/d14e6ccc6b03b7610dde

vimとgitのインストール

MSYS2はパッケージ管理のpacmanがデフォルトで装備されています。強い。
基本の基本、vimとgitをインストールしましょう。

pacman -Syuu # まずは最新の状態に
pacman -S vim
pacman -S git

Neobundleのインストール

vimのプラグイン管理ツールとしてNeobundleを使っています。

このあたりを参考に↓
https://qiita.com/puriketu99/items/1c32d3f24cc2919203eb

まずはgitからclone

git clone https://github.com/Shougo/neobundle.vim ./任意のディレクトリ

次に.vimrcを編集します。neobundle.vimのpathは絶対パスが必須です。

"NeoBundle Scripts-----------------------------
if &compatible
    set nocompatible               " Be iMproved
    endif
    " Required:
    set runtimepath+=neobundle.vimを配置したところ

    " Required:
    call neobundle#begin(expand('neobundle.vimを配置したところ'))

    " Let NeoBundle manage NeoBundle
    " Required:
    NeoBundleFetch 'Shougo/neobundle.vim'

    " Add or remove your Bundles here:

    " Required:
    call neobundle#end()

    " Required:
    filetype plugin indent on

    " If there are uninstalled bundles found on startup,
    " this will conveniently prompt you to install them.
    NeoBundleCheck
"End NeoBundle Scripts-------------------------

vimプラグインのインストール

Add or remove your Bundles hereの部分に自分の入れたいプラグインを指定します。
私の場合はこんな感じにしています

    NeoBundle 'Shougo/neosnippet.vim'
    NeoBundle 'Shougo/neosnippet-snippets'
    NeoBundle 'tpope/vim-fugitive'
    NeoBundle 'ctrlpvim/ctrlp.vim'
    NeoBundle 'flazz/vim-colorschemes'
    NeoBundle 'Shougo/unite.vim'
    NeoBundle 'Shougo/neomru.vim'
    NeoBundle 'tomtom/tcomment_vim'
    NeoBundle 'Yggdroot/indentLine'
    NeoBundle 'itchyny/lightline.vim'
    NeoBundle 'bronson/vim-trailing-whitespace'
    NeoBundle 'tomasr/molokai'
    NeoBundle 'nanotech/jellybeans.vim'
    NeoBundle 'lisposter/vim-blackboard'
    NeoBundle 'altercation/vim-colors-solarized'
    NeoBundle 'kannokanno/previm'
    NeoBundle 'tyru/open-browser.vim'
    " You can specify revision/branch/tag.
    NeoBundle 'Shougo/vimshell', { 'rev' : '3787e5' }

あとはvimを起動してNeobundleInstallで勝手にインストールしてくれる。便利

vmp: the most ambitious vim emulator

$
0
0

I'm t9md

t9md__t9md_.pngPresentation1.png

  • My editor history: Vim > Emacs > Vim > Atom
  • Emacs's limitless extensibility plant never give up sprit to me and it also made me editor addict.
  • Vim plugins: choosewin, qickhl, smalls, textmanip, vim-chef, and more
  • Atom packages: vim-mode-plus, narrow, quick-highlight, cursor-history, and more..(over 30 pkgs!).

Are you familiar with this endless editor tuning loop?.

  • Frustration > Yes I can improve it > Ya I did it!! Oh, I found another frustration point > oh, I've spent too much hours!.

What is the vim-mode-plus(VMP)?

  • It's Atom editor package which provides vim keybinding and plus more.
  • This is fork of vim-mode created by GitHub :octocat:, they now deprecated it in favor of vmp.
VersionDateEvent
v0.0.02015-08-01fork GitHub's vim-mode
v0.1.12015-09-281st public
v1.13.02017-10-27185th release in 818 days (2 years + 3 months)

AVG. 1 release / 4.5 days !!

I'm still keeping high pace release cycle as first year of vmp.


Who use vmp?

Some says vmp is the best vim emulator.
IMO, maybe it's because of precise cursor placement.(e.g. cursor placement after undo or redo operation).


What I will talk today

Part1. Understand editing in Vim

  • What is editing in Vim
  • How it's implemented and executed
  • What is Motion, TextObject and Operator

Part2. vmp's unique features

  • UX improvement
  • Cursor placement
  • One key TextObject
  • Occurrence

Part1. Understand editing in Vim


What is editing in Vim?

slide-picture.jpg


Why can your j keystroke move-down cursors

slide-picture.jpg


Operation's life in stack on operationStack

slide-picture.jpg


Motion, TextObject, Operator

Motion: j, k, {, g g...

  • Move cursor from here to there.
  • When used as TARGET, select here-to-there.

TextObject: i p, i w, a W...

  • Select text range, always used as TARGET.
  • Select same range as long as cursor is within that range
    • i w select same word as long as cursor is within that word.

Operator: d, c, y...

  • Mutate TARGET
  • Always require TARGET. "I will wait until I get target!".

Summary

Editing is to transform text by mutation.

You build mutation instruction through keystroke.

Each keystroke invoke one of Operator, Motion or TextObject.

Formula: Mutation = Operator + Target(= Motion or TextObject)


Part2. VMP's unique features


:camera_with_flash: DEMO session

demo file I used in talk

  • Select operator
  • TransformString operators
  • Edge motion
  • Occurrence
  • Persistent selection
  • Practical use of occurrence etc...

Flash target :flashlight:

  • :bulb: vmp flashes an operator's target and also flashes changes on undo, redo.
  • When you type y i p, it flashes i p range with CSS keyframe animation.
  • With flash, you can be more confident for your operation.

flashOnOperate.gif


UI feedback on surround

  • :bulb: Surround is difficult for me.
  • Because I have to type many keystrokes without mistake, without any UI feedback.
    • y s i w (: surround(y s) inner-word(i w) with (.
  • vmp gives proper UI feedback to make surround easy to use, easy to understand

    • Select target immediately after target was provide(i w) and before you input final surround-char.
    • When change-surround, it shows char will be change at hover indicator.
  • This GIF is after you type c s " and before you input final '
    main.js


Tunable f behavior and flash find-char.

  • :bulb:f is difficult. Where to stop next?.
  • With flashing finding-char, you can predict where to stop next.
  • :bulb: I like all vim-seek, clever-f and vim-sneak, I want all of it's goodness.
    • Make it configurable to find across lines, number of chars to find, auto confirm by timeout, reuse f as ;...
    • You can tune vmp's f as you like.

find.gif


Eliminate unwanted cursor move

  • :bulb: What if cursor is not moved after y i p?
    • In pure-Vim, cursor is moved to start of paragraph.
  • IMO, moving cursor after operator is unwanted side-effect.
  • :gift: vmp introduces various stayOnXXX configuration and all have enabled by default.
    • In pure-Vim, stayOnVerticalMotion + stayOnDelete is doable by :set startofline=false

stayOnXXX configurations

  • Keep cursor positions after operator y i p, d d, g U i p..
    • stayOnTransformString, stayOnYank, stayOnDelete, stayOnOccurrence
  • Keep column when selecting TextObject v i p, v i i..
    • stayOnSelectTextObject
  • keep column on vertical motion g g, G...
    • stayOnVerticalMotion

One-key for VIP(Very ImPortant) TextObject

  • :gift: You can type y p instead of y i p. How many times have you ever typed i p in your life!?
  • :tada: Why? Some keys are freely available in operator-pending-mode.
  • :question: Since Operator is waiting for Target(Motion or TextObject) only. Remember Operator + Target rule?.
  • :mag_right: So Operator + Operator keystroke(y d, d p...) makes no sense, OK to re-map.
    • :warning: One exception, same-operator-twice(d d, y y...) keystrokes have special meaning.

shorthand.gif


Occurrence

  • :bulb: Noticed patterns in coding. I'm repeating same operation on same keyword again and again.
  • :gift: With occurrence, you can bulk apply operator to all occurrences of keyword within target.
  • You can edit more declaratively than imperatively, also can reduces need of . repeat.

cof.gif


Occurrence: How it works

occurrenceslide-picture.jpg

Occurrence is not difficult, technically it's marker edit
  • Mark keyword under cursor then edit as in normal way.
  • You can mark keyword by either of following way
    • operator-modifier: o(word) and O(subword).(e.g. d o p, c O z)
    • preset-occurrence command: g o and g O. I'm remapping to m and M locally.
  1. Mark keyword by g o or g O(subword)
  2. Select visually
  3. c to change, I to insert at start A to append to end of occurrence.

:beginner: Advice to improve vim-skill

  • :mortar_board: Understand this formula. Editing = Operator + Target(Motion or TextObject).

    • :loudspeaker: Install Operator + Target mental model into your brain by shouting loudly while typing.
    • y("Operator"!!) i p("Target!!")
  • :chart_with_upwards_trend: Pick and master from high-return Motion, TextObject first.

    • Motion: g g, G, [, ](VMP only)
    • TextObjet: i p, i w, i z(VMP only), i ,(VMP only)
  • :rice: Use it in daily editing.

  • :musical_keyboard: Repeat, repeat, repeat! Till your finger moves without THINKING.

    • Vim: y i p, y i p, y i p... c i p, c i p... d i p...
    • Vim: y i ,, y i ,, y i ,... c i ,, c i ,... d i ,...
    • vmp shorthand: y p, y p, y p... c p, c p... d p...
    • vmp shorthand: y ,, y ,, y ,... c ,, c ,... d ,...
  • :syringe: Gradually increase TextObject, Motion of daily use.


:wave:: VMP is the most ambitious vim emulator in the world(IMO!).

  • :gift: Bundled so many non-default Motion, TextObject, Operator.
  • :gift: Introduces new editing concept: e.g. occurrence, persistent-selection.
  • :heart: UX improvement to make Vim easy to use, easy to understand.
  • :bomb: vmp is NOT aiming to become a perfect Vim emulator(no interest!).
  • :ghost: My mental stance is just borrowing favorite Vim features.
  • :bulb: Motivation is to experiment what-if ideas with hackable editor(Atom!).
  • :skull: Ideas comes from frustration I encounter in daily vmp-dev. Endless feedback loop!
  • I'm really SERIOUS for vmp, but vmp is NOT STRICT.
This GIF is now removed "show operator representing emoji" feature. You see how vmp is NOT strict?

emoji.gif


:bow: Thank you!!! :bow:

Viewing all 5608 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>