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

zshのViモードをインターフェイスとして利用してみる

$
0
0

ViとEmacs

zshでは、ViEmacsのキーバインドを利用できます。

私は普段、Emacsのキーバインドを使っています。

確かに、Viのノーマルモードは、非常に有効です。

その理由は、コーディングにおいては、繰り返し処理、一括処理をする場面が多く、複雑な処理をコマンド一発で実行することが多いからです。

しかし、僅か1行の短文などを編集する場合は、ノーマルモードの利点を上手く生かせないと考えています。

このような場合までノーマルモードに移行するのは、面倒です。

そんなこともあり、私は、基本 Emacs のキーバインドを使っています。

しかし、せっかく Vi のノーマルモードが用意されているのだから、よく使う外部ツールを操作するためのインターフェイスとして利用してみてはどうかと考えました。

ということで、今回は、zshのViモードを外部アプリのインターフェイスとして利用する方法を提案をしてみたいと思います。

Vi modeをプロンプトに表示する

まず、現在はノーマルモードかインサートモードかを判断できるようプロンプトに表示してみます。

~/.zshrc
function zle-line-init zle-keymap-select {VIM_NORMAL="%K{208}%F{black}⮀%k%f%K{208}%F{white} % NORMAL %k%f%K{black}%F{208}⮀%k%f"VIM_INSERT="%K{075}%F{black}⮀%k%f%K{075}%F{white} % INSERT %k%f%K{black}%F{075}⮀%k%f"RPS1="${${KEYMAP/vicmd/$VIM_NORMAL}/(main|viins)/$VIM_INSERT}"RPS2=$RPS1
    zle reset-prompt
}

参考:
http://hamberg.no/erlend/posts/2010-10-17-show-current-vi-mode-in-zsh-prompt.html

これを設定ファイルに書くと、現在の Vi mode がプロンプトに表示されます。

ちなみに、カラーは、256色で指定しています。カラーを確認したい場合は、以下のコマンドを実行してください。

for c in {000..255}; do echo -n "\e[38;5;${c}m $c" ; [$(($c%16)) -eq 15 ]&&echo;done;echo

参考:
http://qiita.com/k_ui/items/b02b93e3af13023c0bfd

ノーマルモードに移行するキーを変更する

通常は、Escまたは、C-]かと思いますが、jjで移行できるようにしてみます。ちなみに、インサートモードに戻るには、iです。

これにより、ノーマルモードに移行しやすくなります。

~/.zshrc
bindkey -M viins 'jj' vi-cmd-mode

Chromeを操作するインターフェイスとして利用してみる

私は、ターミナルの次に、ブラウザをよく使いますので、vi-modeをChromeを操作するインターフェイスとして使ってみることにしました。

ノーマルモードのキーバインドを定義するには、bindkey -aを使います。

例えば、「bindkey -a 'a' vi-forward-word」みたいな感じです。

GitHubに上げましたので、試したい方は、ダウンロードしてください。

ただし、例のごとくApple scriptを利用していますので、利用者出来る人はかなり限定されています。iTerm2Chromeが必要です。

https://github.com/syui/cscroll.zsh

$ sudo port install gauche

$ mkdir -p ~/dotfiles/zsh

$ cd !$ && git clone https://github.com/syui/cscroll.zsh

$ cd !$:t

$ echo source$PWD/cscroll.zsh >> ~/.zshrc

$ source ~/.zshrc &&exec$SHELL$ curl https://raw.github.com/syui/cscroll.zsh/master/cscroll.zsh
キー効果
j下にスクロール
k上にスクロール
h戻る
l進む
tタブを閉じる
ff{2文字}
b続けてキー{Enter,Esc,Delete,Shift}を押す

j,kでスクロール。h,lで前と次へ。

ViChrome入れている人などは、fを押すと、f-modeが起動します。f-modeは、続けて二文字を入力することでコマンドが完了するように設定しました。

二文字判定の処理は、こちらの記事で紹介したスクリプトを利用しています。

$ sudo port install gauche

EnterEscなどの一部キーは、bに続いて押すことで、実行されます。例えば、b{Enter}などです。

ただし、パソコンによっては、キーコードが異なることが予想されるため、この部分は、個人環境によって書き直す必要があります。ここでは、Aの部分です。

chrome_button.sh
case"$button" in

    "A")echo"tell application \"Google Chrome\"    activate    tell application \"System Events\"        delay 0.1        keystroke return        tell application \"iterm\"            activate        end tell    end tellend tell" | osascript -
;;

それぞれのキーを判別するには、cscroll.zshに入っているスクリプトを使い以下のコマンドを実行しましょう。

$ gosh read-single-char.gosh |col -bx| tr -d ''

ちなみに、iTerm2のウィンドウの透過度を設定するには、以下の様なShell scriptを使います。引数で透過度を指定します。

iterm2_transparency.sh
#!/bin/shecho"tell application \"iTerm\"    activate    tell current session of current terminal      set transparency to $1    end tellend tell" | osascript -
$ chmod +x iterm2_transparency.sh

$ ./iterm2_transparency.sh 0.3

あと、クリップボードにある文字列を送るキーや入力モードを追加すると、便利な気がしています。


Viewing all articles
Browse latest Browse all 5608

Trending Articles



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