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

fbtermの日本語表示.uim-fepとuim-anthyで日本語入力も.ついでに,vimの256色化も

$
0
0

fbtermの日本語表示.uim-fepとuim-anthyで日本語入力も.ついでに,vimの256色対応も

  • lenovo-S21e
  • Ubuntu16.04LTS

昨今のLinuxのディストリビューションは,デスクトップ環境がデフォルトでついてくるものが多い.

十分なスペックのPCであればヌルヌルと動いてくれるだろうが,貧弱なノートPCを使っているユーザーにとっては,
必要なときだけ立ち上がってくれれば十分だ.(人による)

基本は仮想コンソールで生活するのだ.
仮想コンソールとはctrl+alt+F1で移動できる正に文字だけの世界.
そのままだと日本語の表示すらできないが,ちょっと工夫してやれば画像だって表示できるのだ.

CUIで動作する素晴らしいアプリの数々に君はきっと魅了されるはずだ.
むしろ,GUIって使いにくいと思う場面が増えると思う.

そこで,普段では仮想コンソールを使用し,必要に応じてデスクトップ環境を立ち上げるようにすると,
- 省メモリ
- 省電力
- 高速化
が実現できる.

しかーし.

この仮想コンソール.デフォルトだとすんごく使いにくい.
1. 日本語が文字化けする

◆◆◆◆◆◆◆
  1. 日本語入力ができない
  2. vimの256色表示ができない

特に三つめが致命的である.

そこで,この3つを導入し,設定ファイルを書いてやれば,上のすべての問題が解決され,素晴らしい環境が整う.

  • 日本語表示のため
    • fbterm
  • 日本語入力のため
    • uim-fep
    • uim-anthy

caps lockをctrlに

悪名高いcaps lockをctrlにしておこう.
キーボードによってはctrl-capslockの入れ替え,もしくはcapslock ctrl化が必要だろう.

キーボードの配列を変更するには次のファイルをいじる

/etc/default/keyboard

私の場合はこんな感じ.

# KEYBOARD CONFIGURATION FILE

# Consult the keyboard(5) manual page.

XKBMODEL="pc105"
XKBLAYOUT="us"
XKBVARIANT=""
XKBOPTIONS="ctrl:nocaps"

BACKSPACE="guess"

ここにも書いてある通りman keyboardを見ると設定方法が書かれている.

もし,日本語配列のキーボードを使っているならUS配列として認識させておこう.
ブラケットやカッコの入力とってもしやすくなる.
ついでにバックスラッシュはUS配列よりも打ちやすくなる.
実は日本語配列のキーボードはTeXユーザーにとって,とっても親切な設計なのだ.

仮想コンソール

仮想コンソールあるいはtty(teletypewriter)と呼ばれているものがある.

ctrl+alt+F1

でtty1に移動できる.

F2,F3だとtty2,tty3に移動できる.

F1-F6がttyでF7がttyS7であることが多いと思う.

そしてこのttyS7が通常のデスクトップ環境.

ちなみに,仮想コンソールに入っていれば,

ALT + 左右の矢印

で隣のttyに移動できる.

この仮想コンソールはX11を必要としない.
だからめちゃくちゃ軽い.速い.
ただし,コマンド操作しかできない.
さらには,
そのままだと日本語の表示すらできないが,ちょっと工夫してやれば画像だって表示できるのだ.

uim-fep & uim-anthy で日本語入力.

日本語入力を行うソフト達.

fbtermの起動時にこれをオプションとして渡すので,先に書いておいた.

uim自体はいれなくていいので.

sudo apt install uim-fep
sudo apt install uim-anthy

これを導入しよう.

日本語入力と直接入力の切り替え方法の設定

日本語と英語との入力切替をctrl-spaceに設定するには,

  • ~/.uim

をいじれば良い.

デフォルトでは

  • /usr/share/uim/generic-key-custom.scm

が読み込まれるらしい.

ctrl + space で切り替えを行うには次のように~/.uimに書けばよい.

(define default-im-name 'anthy)
(define-key generic-on-key? '("<Control> "))
(define-key generic-off-key? '("<Control> "))

ちなみに,この設定ファイルのコメントは
セミコロンで始まる行だ.

;;;

一つでいいのかどうかは確かめていない.

句読点をピリオドとコンマにしたい

そんな時は~/.uimにこう書けばよい.

(require "japanese.scm")
(define ja-rk-rule
 (append '(
       (((",") . ()) ("," "," ","))
       (((".") . ()) ("." "." "."))
      )
  ja-rk-rule))

どうやらキーに直接割り当てているよう.
だから,普通の句読点が打てなくなってしまう.

fbtermの導入

fbtermとは,おそらくframe buffer terminalの略称であろう.

そもそもframe bufferとは何か.

/dev/fb0に関係する雑談

linuxでは各種デバイスに簡単にアクセスできる.
つまり,モニターやスピーカーはファイルと同じようにアクセスできる.


    int fd=open("/dev/fb0",IO_RDWR);

こんな風に.

なんだったら


    FILE* fd=fopen("/dev/fb0","rwb");

でもいける.違いはバッファがあるかないか.

echo test.txt >/dev/fb0

とかしてやれば,permissionがあれば画面上の一列になんか変なものが表示されるはず.

clear

で消せる.

つまり,fbtermはこれを使って画面を乗っ取り,その上で端末を動作させているのだ.

時々,カーネルが吐くメッセージが下の仮想端末に表示されて,乗っ取り返されるときがある.
こういうときはclearとか,画面全体を描画しなおす操作をすればOK.

そのうち記事を作って遊ぶと思うので,ここではここまで.

本筋に戻る

ではfbtermを導入しよう.

sudo apt install fbterm

後,画面が小さかったりフォントが気に食わないということがあるだろう.

そんなときは~/.fbtermを編集だ.

デフォルトで~/.fbtermが作成されるから,それを見ながら適宜いじればよいと思う.

個人的には

font-names=Ubuntu mono
font-size=20


color-foreground=7
color-background=0

cursor-shape=1

ambiguous-wide=yes

こう設定している.

Ubuntu monoっていいよね.

特に0が...

サ・レ・オ・ツ って感じ〜〜 キャピッ 

ただし,これだけだと日本語の表示が可能になるだけで,入力ができない.

sudoでないと起動できないよ

そういえば,/dev/fb0って所有者がrootで所有グループがvideoだったりする.
だからfbtermはsudoでないと実行できない.

/dev/fb0の権限を変えたりしてもいいが,自分のユーザーアカウントをvideoグループに追加しよう.

usermod -aG video <user name>

-aオプションをつけないと,それ以外のグループから追い出されるので注意

fbtermの自動起動

上の設定だけだと普通にログインした後,

fbterm

もしくは

fbterm -- uim-fep

と打たないとfbtermに入れない.面倒なので色々設定して自動ではいれるようにしておこう.

自動起動には~/.profileもしくは~/.bashrcにでも

fbterm -- uim-fep
と書けばいいんだけれども,
実はこれだけだと上手く行かない.

256色対応にしてvimの華麗なカラースキームを味わおう

ここはちょっと情報を探すのに苦労した.

何もしないとmolokaiなどカラースキームの色がつかない.
ついたとしても何か違う.

fbterm自体フレームバッファを乗っ取ってるから色なんて自由自在のはず.

なんで....色がおかしいんや...
molokaiが無残な配色に成り下がってしまった.

tput colorsが8のまま変わらない...

しかし,こんなことでへこたれる


(`・ω・´)

ではない.

これは少しfbtermの自動起動とか変わってくるが.
設定ファイルにこのように書けば良い.

まずは~/.profileだ.

if [ "$TERM" = "linux" ]
then
    #/e]XXYYYYYY
    #XXは色識別子
    echo -en "\e]P0222222" #black
    echo -en "\e]P8222222" #darkgray
    echo -en "\e]P1803232" #darkgray
    echo -en "\e]P9982b2b" #red
    echo -en "\e]P25b762f" #darkgreen
    echo -en "\e]PA89b83f" #green
    echo -en "\e]P3aa9943" #brown
    echo -en "\e]PBefef60" #yellow
    echo -en "\e]P4324c80" #darkblue
    echo -en "\e]PC2b4f98" #blue
    echo -en "\e]P5706c9a" #darkmagenta
    echo -en "\e]PD826ab1" #magenta
    echo -en "\e]P692b19e" #darkcyan
    echo -en "\e]PEa1cdcd" #cyan
    echo -en "\e]P7ffffff" #lightgray
    echo -en "\e]PFdedede" #white

    FBTERM=1 exec fbterm -- uim-fep
fi

お次は~/.bashrcだ.

case "$TERM" in
    linux)
        [ -n "$FBTERM" ] && export TERM=fbterm
        ;;
    fbterm)
        #何もしない
        ;;
    *)
        export TERM="xterm-256color"
esac

ちなみに仮想コンソールにログインした時に,

echo $TERM

と打つと,

linux

と表示されると思う.
つまりそういうこと.

fbtermを起動すると,$TERMをfbtermに設定しているのだ.

こうすることによってw3mのインライン画像を表示させることが可能になるのだ.

fbterm上でw3mの画像のインライン表示をさせる方法

ここで解説しているよ.

https://qiita.com/Pseudonym/items/310bc76fdbdeca76b903


vim色に染まれ

$
0
0

vim色に染まれ

vim色って何なんだろうね?

環境

  • lenovo-S21e
  • ubuntu16.04LST
  • vimにプラグインは入れたくない派

目的

vimは素晴らしいエディター

秘められた可能性が大きすぎるため,
デフォルトの機能ですら使いこなすのが難しい.

また,bashをvi仕様にする記事が意外と少ない.

そこで,あんまり紹介されていない系の便利(?)機能と愚痴の数々を紹介したい.

(´・ω・`) < 紹介されてないってことは常識?

(´・ω・`) < つまり知らなかった自分は常識人ではなかった?...

(´;ω;`) < ウッ… ぼやいてばっかだし...

vim以外でも使えるものもあるので.

bashをvi仕様に set -o vi

export EDITOR=vim

の設定をしているであろうか.
きちんと設定ファイルに書き込んでおこう.

そうでないと,gitとかのエディターがvim以外に設定されることがある.nanoとかemacsとか.

bashはデフォルトではemacsに似たキーバインドになっている.
一例はこんな感じ.

ctrl f %次の文字へ
ctrl b %前の文字へ

ctrl a %先頭の文字へ
ctrl e %末尾の文字へ

ctrl p %前のコマンド履歴へ
ctrl n %次のコマンド履歴へ

ctrl k %カーソル位置から行末まで削除
ctrl u %カーソル位置から行末まで削除

ctrl d %カーソル位置の文字を削除
ctrl h %BSC

(´;ω;`) < せっかく覚えたのにemacsのキーバインドだったとは...

しかし,この辺もしっかりvim仕様にしておきたい.

プラグインなど入れずとも, bash上で

set -o vi

と叩くだけでよい.

~/.bashrcにでも書いておけば勝手に呼び出される.

ただし若干通常のvimと違う動作をするので,重要なところだけピックアップしておこう.

履歴の辿り方

bashのコマンドラインを,historyのように過去のコマンドが上に隠れているファイルと捉えると操作を捉えやすくなる.
つまりコマンドの履歴を辿りたければ,コマンドモードに入って上の行を見てやれば良い.

k %前のコマンド履歴へ
j %次のコマンド履歴へ

ただし,ctrl eやctrl y とかctrl f, ctrl b, ctrl u, ctrl dは使えない.
次で紹介するvisual modeでは使うことができる.

愚痴

(´・ω・`) < vimのコマンド履歴はctrl pやctrl nで辿れるのになんで?

(´・ω・`) < 補完機能のコマンドないんだから,空いてるやん...

コマンドラインでは,直接は使えないコマンド(実は使えるよ)

行内の移動に関するコマンドはほとんど使えるので,これだけでも十分便利だが使えないものがある.

ci"

とか,visual modeの選択系のコマンドだ.
ただし,

2cw

とかは使える.

糞だな思ったあなた,実はそんなことはない.
次で紹介する機能を使えば良い.

の前に,愚痴を

(´・ω・`) < ci"とかvのコピペとか,見てわかるから便利なのに...

(´・ω・`) < dt"とかcf}とかでギリ代用はできるけど...

(´;ω;`) < 2cwとか数字で指定する系のコマンドは苦手なの...

visual modeでファイルとして開き編集できる

コマンドモードでvを押すと,
visual modeもとい,ファイルのように編集できるモードに切り替わる.

ここではbash scriptをファイルとして編集し,最後にZZ:wqで保存すると,
ファイルに書いたスクリプトが実行されるのだ.
もちろん,コマンド履歴(history)にも保存されるので安心だ.

vimの機能が存分に使える.

ESC(エスケープキー)はいらない子

insert modeから抜けるのにESCキーを押すユーザーが存在すると思う.

今すぐにやめ,

ctrl [

を使おう.
普通ESCキーは一番左上に配置されていると思う.
こんなホームポジションからかけ離れたキーなんて押していられない.

ちなみに

ctrl c

でも似た動作をするが,微妙に動作が違うのでctrl [を使うようにしたい.
また,キーマッピングで他のキーに割り当ててもよい.

BSC(バックスペースキー)はいらない子

insert modeで左の文字を消したいとき,BSCを押すユーザーが存在すると思う.

今すぐにやめ,

ctrl h

を使おう.

普通BSCキーは右上に配置されていると思う.
こんなホームポジションからかけ離れたキーなんて押していられない.

ちなみにctrl hになれると,他のソフトでもこれで文字を消そうとしてしまう.
ソフトによってはHELPが表示され鬱陶しいことこの上ない.

(´・ω・`) < そんなにHELPを開いて欲しいのか...

(´;ω;`) < 苦労して書いたんだろうな...

AutoHotKey

Windowsを使っているのなら,AutoHotKeyを使おう.

AutoHotKeyをインストールし設定ファイルを作ろう.

^h::Send {Backspace}

これで煩わしさから開放される.

調子にのって他のソフトでもvimっぽい動作をさせようと,ゴリゴリ書いていると,
本当のvimの動作がおかしくなるのでほどほどにね.

tabキーはいらない子

tabキーはさほど押すのに苦労しないが,
あえて

ctrl i

で代用しよう.

意外と便利だったり?

(行の先頭に挿入のIと併用することが多いので,紛らわしかったり...)

タグを使おう

ctags -R *

で,そのディレクトリ以下のファイルをたどり,tagsファイルを作成してくれる.

:set tags=./tags

とかでタグをセットすると,そのタグが使えるようになる.

また,~/.vimrcに

set tags=./tags

とか書いておくと,その場所にあれば自動で読み込んでくれる.

タグジャンプで縦横無尽に飛び回れ

ctrl ]

これで,タグにひもづけられた場所へジャンプできる.

複数の候補がある場合は

g ctrl ]

で,複数の候補の中から選択できるようになる.

<number> ctrl ]

でも代用可能.

戻るときは

ctrl t

だ.

特にこのコマンドは,

ctrl o
ctrl i

としっかり区別して使った方が,思わぬ移動を防げる.

ちなみに

ctrl o

は移動する前にいた位置に戻る.

ctrl i

はctrl o に対するredo

ファイルへジャンプ

gf

go to fileっていう意味だろう.
カーソルのある場所のファイルを開く.
ヘッダファイルとかだと,あらかじめパスが通って入れば,
ヘッダファイルを開いてくれる.

もちろん,ヘッダファイルだけでなく,shell scriptでかかれたパスとかにも移動できる.
別の設定ファイルへのジャンプに便利だったり.

別ウィンドウで開きたいとき

これが一番紹介したかった機能.

ctrl w

これはウィンドウの操作に関連するコマンドで欲使われる.
これのすごいところは,他のコマンドとガンガン並用可能なところ.

例えば,

ctrl w ctrl ]
ctrl w gf

これ以外にも色々使える.

ちなみにデフォルトでは横分割.

デフォルトの補完機能を上手に使おう

補完候補を常に表示させる.

いやこれめちゃくちゃ便利.

チーズバーガー中毒: Vimで入力補完を常にオンにするvimrc[http://io-fia.blogspot.jp/2012/11/vimvimrc.html]

~/.vimrcに次のものを書き足そう.

set completeopt=menuone
for k in split("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_",'\zs')
  exec "imap " . k . " " . k . "<C-N><C-P>"
endfor

imap <expr> <TAB> pumvisible() ? "\<Down>" : "\<Tab>"

通常の補完

ctrl p
ctrl n

これで補完を行う.
隣でwindowを開いていたりすると,そこのファイルからも補完を行えるようになる.

タブはどうだったかな?

特定の補完を行う

ファイルパス補完

ctrl x f

こいつの欠点は,

PATH=/usr/local/

とか入力したいときに現れる.
入力したいパスの前に=があると補完に失敗する.なんで?

愚痴

(´・ω・`) < マジ,めんどくさす

このせいでMakefileとかbash scriptとか書くとき,
すんごく面倒くさい.

対応策として,

"path"

のように"で囲んだり,一回改行してJやgJで詰めたりしている.

行補完

ctrl x l

意外と便利.

パスパターン補完

ctrl x i

インクルードファイルやインポートしたファイルとかから補完を行うモード

タグ補完

ctrl x ]

タグジャンプが ctrl ] だから連想しやすい.

(実は知らなくてあんまり使っていなかったことは秘密)

定義もしくはマクロ補完

ctrl x d

あんまり使わないな.

vimのコマンドライン補完

ctrl x v

その他の補完

  • オムニ補完
  • ユーザー定義補完
  • スペリング補完

などなどあるが,別途ファイルを作る必要があるなど,ちと面倒なので使っていない.
使えば便利なんだろうけどねえ.

vimって実はファイラーでもあるんだよ

vimは簡易ファイラーとしても使える.
開き方は簡単で,

vim <directory>

と指定すれば良い.
current directoryを開きたければ.

vim ./

だ.
基本的な操作方法やヘルプへの入り方は,起動した時上の方に書かれている.

rangerほど高機能ではないが,:sp:vsとかと組み合わせて,別ウィンドウでディレクトリが見れる.

まあ,プラグインを入れればできることなんだけれど,デフォルトでも似たことは可能であるという意味で紹介したかった.

ウィンドウ系のコマンドと併用して他画面ファイラーとして使えたりするが,いかんせん機能がしょぼいのが難点.

欲しい機能

今のvimだと,:shでbashに入れるけど,
全画面でしか入れない.

  • vimの隣のウィンドウだけbashにするとかできないのかな....

もちろん,プラグインは無しで.

  • gitとの連携が簡単にできたらいいな...

もちろん,プラグインは無しで.

現在のところ,単なるクラウドドライブ扱いになっており,gitの意味がない.

:w |! git commit -am "great update by me"; git push origin master

このコマンドをctrl pでちょちょっと探して実行.

[参考文献]

VIMから秀丸Grepを呼び出す

$
0
0

VIMから秀丸Grepを呼び出す

「なにやってんだろう」って、VimScript書きながら100回は唱えたかな

  • 苦しみ
    • Windowsのランチャーアプリからgrepを呼び出した時、カレントがランチャーアプリのフォルダになる
    • 上記の解決方法がよくわからない
    • 上記理由で、vimからgrep呼び出すとパス入力が億劫
    • 上記理由で、Grepだけ秀丸を使っている
    • もっと良い方法があれば、教えてください
"call hidemall grep"{{{if has('win32')nnoremap<silent><leader>H :<c-u>call<SID>HidemaruGrep()<CR>function! s:HidemaruGrep()letl:word = input('Search:')letl:ftype= input('Extension(.txt):')ifl:ftype ==""letl:ftype ="*"elseletl:ftype ="*" . l:ftypeendifletl:targetfile  = expand("%:p")letl:lastfolderid = strridx(targetfile,"/")letl:targetfolder =l:targetfile[0:l:lastfolderid] . l:ftypeletl:cmd ='!"C:\Program Files (x86)\Hidemaru\Hidemaru.exe" /gu, "' . l:targetfolder . '" ' . l:wordsilent execute l:cmdendfunctionendif"}}}

Denite file_rec でマッチャーが機能しない | nixprime/cpsmのビルド方法

$
0
0

序章

NeoVimでDenite file_recをしてる時にcpsmマッチャーがうまく機能していないっぽかったので、手動でcpsmのビルドを試みてみた。というおはなし。

原因がcpsmだと分かったきっかけ

:messageをしたらcpsmが原因っぽいエラー出力があった。
何事もverboseなログ出力コマンドは知っておくべきですね。

解決手順

まずは普通にinstall.shを用いて手動ビルドを試す。

sh
cd /path/to/cpsm
./install.sh

エラー。

エラー出力
PY3 not specified;
inferring Python version from vim script:
    cannot set signal handler:
        Function not implemented script:
            cannot set signal handler: Function not implemented
                ./install.sh: line 26: [: : integer expression expected
                ./install.sh: line 29: [: : integer expression expected
ERROR: No Python support detected

PY3が特定できなかったのでvim scriptから推測?
期待されていない整数?
Pythonのサポートが検知されない?
「知らんけどPY3って文字見たことあるな...そう言えばPY3=ONってdein_lazy.tomlに書いたわ。なるほど?まぁ、よくわからんが大文字だけの変数らしきものって大抵環境変数なんだよね~」
...とアホな推理をしてexport PY3=ON && ./install.shとかすると、ダメな選択な癖して先に進めてしまうので、どんどん泥沼にハマっていってしまいます。

正解は、envコマンドです。
envコマンドとは、環境を変更してコマンドを実行するコマンドです。

使い方
env [env_name]=[value][command]

今回はこのコマンドを使用して、Python3を使用した環境ですよ~と伝えた状態で./install.shしてみましょう。

env PY3=ON ./install.sh

すると、またエラーがでてきます。
しかも今度は量がめちゃくちゃあります。

こういう時はとある定石がひとつあります。
それは、READMEを読むことです。

README大事。ホントに。

README
Requirements
------------

- Vim 7.4, compiled with the `+python` flag.

- A C++ compiler supporting C++11.

- Boost (Ubuntu: package `libboost-all-dev`).

- CMake (Ubuntu: package `cmake`).

- Python headers (Ubuntu: package `python-dev`).

- Optional, required for Unicode support: ICU (Ubuntu: package `libicu-dev`).

Pyenv users on Mac OS X: cpsm requires dynamic Python libraries, which pyenv
does not build by default. If CMake indicates that it's using static libraries,
e.g.:

\```
-- Found PythonLibs: /Users/<username>/.pyenv/versions/3.5.2/lib/python3.5/config-3.5m/libpython3.5m.a
\```

Rebuild with dynamic library support by running `env
PYTHON_CONFIGURE_OPTS="--enable-framework" pyenv install <version>`.

Python 3 Support
----------------

If your Vim is compiled against Python 3 instead (`+python3` flag) the install
script should detect this in most cases and everything should just work. You may
need different python headers installed (e.g. `python3-dev` on Ubuntu).

If the detection does not work for any reason you can set `PY3=ON` or `PY3=OFF`
as appropriate when running `./install.sh` to override it.

どうやら今回はBoostというものが足りてなかったみたいです。(地味にちゃんとPY3=ONの話も書いてありますね。env PY3=ONと書かれていないのは不親切な気もしますが。)
なので、それを入れてからもう一度試してみましょう。

apt -y install libboost-all-dev
env PY3=ON ./install.sh

成功しました!
ちゃんとマッチャーとして機能していますね!
わーい!

Powerlineは難しくないよ!

$
0
0

始まる前に

格好いい開発環境を作るのは、仕事に集中するためにテーブルの上を綺麗に整理することと同様です。
私はshell、tmux、vimを主に使っていますが、これらを格好良くするため、Powerlineを使います。
Powerlineについてはあちこちに情報が多いし、多様なので、どんな方法を選べばいいのか躊躇してしまいます。
過去、私もそうでした。

ある程度、頭の中が整理されたので、記事を作成しました。

背景知識

Powerlineはpythonで作られたライブラリです。
Powerlineを使うためにはpythonとそのパッケージ管理ツールであるpipをインストールする必要があります。
そして、Powerline用のフォントをサーバーとそのサーバーに接続するターミナルにも適用しなければなりません。
Powerline用のフォントをインストールする方法はosごとに異なります。
そして、ターミナルごとにPowerline用のフォントの設定方法も異なります。

これだけではありません。
Powerlineは様々なshell、vim、tmux環境に使えますが、その設定方法が異なります。
女性が化粧することと同じく綺麗に見せるためには色々と時間が掛かります。

しかし、vimを使う人には他の道もあります。
vim-airlineというプラグインを使うことで、Powerlineと同じ効果を演出できます。
vim-airlineは、vim scriptで作成されたので、pythonやpipでPowerlineをインストールしなくても大丈夫です。
これは大きなメリットですね。
Powerlineの場合はPowerlineのdaemonをバックグラウンドで実行させる必要がありますが、vim-airlineの場合は要りません。
しかし、vim-airlineもPowerline用のフォントを使うため、フォントのインストールとターミナルへの適用は必要になります。

ここではvim-airlineを使う方法について説明します。

vim-airlineをインストール

vimのパッケージ管理ツールとしてvim-plugを使っています。
vim-plugについての詳細は「NeoBundleからvim-plugへ」をご参照ください。
vim-plugでvim-airlineとvim-airline-themesをインストールします。
.vimrcファイルを次のように修正して.vimrcをリロードした後、「:PlugInstall!」を実行してください。

.vimrc
call plug#begin('~/.vim/plugged')
...snip...
Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'call plug#end()

次は、vim-airlineのオススメの設定です。

.vimrc
" Powerline系フォントを利用するsetlaststatus=2letg:airline_powerline_fonts =1letg:airline#extensions#tabline#enabled =1letg:airline#extensions#tabline#buffer_idx_mode =1letg:airline#extensions#whitespace#mixed_indent_algo =1letg:airline_theme ='tomorrow'if!exists('g:airline_symbols')letg:airline_symbols = {}endif" unicode symbolsletg:airline_left_sep ='»'letg:airline_left_sep ='▶'letg:airline_right_sep ='«'letg:airline_right_sep ='◀'letg:airline_symbols.crypt ='🔒'letg:airline_symbols.linenr ='☰'letg:airline_symbols.linenr ='␊'letg:airline_symbols.linenr ='␤'letg:airline_symbols.linenr ='¶'letg:airline_symbols.maxlinenr =''letg:airline_symbols.maxlinenr ='㏑'letg:airline_symbols.branch ='⎇'letg:airline_symbols.paste='ρ'letg:airline_symbols.paste='Þ'letg:airline_symbols.paste='∥'letg:airline_symbols.spell='Ꞩ'letg:airline_symbols.notexists ='∄'letg:airline_symbols.whitespace ='Ξ'" powerline symbolsletg:airline_left_sep =''letg:airline_left_alt_sep =''letg:airline_right_sep =''letg:airline_right_alt_sep =''letg:airline_symbols.branch =''letg:airline_symbols.readonly=''letg:airline_symbols.linenr ='☰'letg:airline_symbols.maxlinenr =''

vim-airlineは色んなthemeを提供しています。
スクリーンショットがありますから好みのthemeを探してみましょう。

https://github.com/vim-airline/vim-airline/wiki/Screenshots

私はmacOSの環境でtomorrowのthemeを使っています。

.vimrc
letg:airline_theme ='tomorrow'

Powerline fontsをインストール

https://github.com/powerline/fonts

ここでQuick installationのところを確認してください。
インストール手順が詳細に書かれています。

# clone
git clone https://github.com/powerline/fonts.git --depth=1# installcd fonts
./install.sh# clean-up a bitcd ..
rm -rf fonts

要は、install.shを実行することです。
install.shの中身を確認してみましょう。

install.sh
<F28>#!/bin/bash# Set source and target directoriespowerline_fonts_dir=$(cd"$( dirname "$0")"&&pwd)# if an argument is given it is used to select which fonts to installprefix="$1"find_command="find \"$powerline_fonts_dir\" \( -name '$prefix*.[o,t]tf' -or -name '$prefix*.pcf.gz' \) -type f -print0"if[[`uname`=='Darwin']];then# MacOSfont_dir="$HOME/Library/Fonts"else# Linuxfont_dir="$HOME/.local/share/fonts"
  mkdir -p $font_dirfi# Copy all fonts to user fonts directoryecho"Copying fonts..."eval$find_command| xargs -0 -n1 -I % cp "%""$font_dir/"# Reset font cache on Linuxifcommand -v fc-cache @>/dev/null ;thenecho"Resetting font cache, this may take a moment..."
    fc-cache -f $font_dirfiecho"Powerline fonts installed to $font_dir"<F29>

unameでosを判別してホームディレクトリの配下にPowerline用のフォントをコピーします。
そして、macOSやLinuxシステムではfc-cacheを実行してcacheをリセットすることでコピーしたフォントを使えます。

私の場合、macOSは一人で使うため、ホームディレクトリの配下にコピーしても良いですが、Linuxは開発サーバーとして複数人が使うことを想定しています。
Powerline用のフォントファイルは意外とファイルサイズが大きいので、人々が共通的に使える場所にコピーした方がいいと思います。
Linuxの場合はinstall.shを使わずに、下記のコマンドを使います。
install.shを参考にして作りました。
root権限で実行してください。
(Linuxでも一人で使うことであれば、Quick installationの手順通りinstall.shを実行してください。)

# mkdir -p /usr/share/fonts/powerline# find /tmp/fonts \( -name '*.[o,t]tf' -or -name '*.pcf.gz' \) -type f -exec cp {} /usr/share/fonts/powerline \;# fc-cache -vf

fc-cacheやfc-listなど、フォンド関連コマンドを使うためにはfontconfigが必要です。
インストールされていない場合は、インストールしてください。

  • Linux
% sudo yum install -y fontconfig
  • macOS
% brew install fontconfig

Rictyを使いたい場合

macOSの場合は、次の記事を参照してください。

Macでプログラミング用のフォントRictyを設置した話

Linuxの場合だと少し面倒です。
まずRictyフォントを作ってPowerline用のフォントに変換しなければなりません。
しかし、心優しいエンジニアさんがすでに作っておいたものがありました。

https://github.com/mzyy94/RictyDiminished-for-Powerline

これを使えばフォントを作りPowerline用のフォントに変換する面倒な作業を省けます。
vim-powerline-fontpatchedの配下にあるフォントを/usr/share/fonts/powerlineの配下にコピーしてfc-cacheを実行すれば完了です。

ターミナルでPowerline用のフォントを設定

  • iterm2

Preferences > Profiles > Text 順に選択します。
FontとNon-ASCII Fontにて「Change Font」ボタンをクリックして〜for Powerlineというフォントを選択します。
ここではRictyをPowerlineに対応したフォントを選びました。

スクリーンショット 2017-11-29 12.44.17のコピー.png

  • macOSのターミナル

プロファイル > テキスト 順に選択します。
フォントにて「変更」ボタンをクリックして〜for Powerlineというフォントを選択します。
ここではRoboto Mono for Powerlineを選びました。
powerline/fontsの中に含まれているフォントです。

スクリーンショット 2017-11-29 12.44.41.png

  • rlogin

設定 > フォント 順に選択します。
フォントセットからUNICODEを選択し「編集」ボタンをクリックしてください。

rlogin_powerline_font_01.png

IConv Character Setには「UTF-16」を、フォント設定のWindows Character Setには「ANSI」を選択します。
そして、「Font」ボタンをクリックします。

rlogin_powerline_font_02.png

〜for Powerlineというフォントを選択し「OK」ボタンをクリックします。
ここではRoboto Mono for Powerlineを選びました。

rlogin_powerline_font_03.png

因みに、WindowsではFontのインストールの手順がmacOSやLinuxと異なります。
Windows 7ですと、ダウンロードしたフォントからマウス右クリックして「インストール」をクリックすれば完了です。

rlogin_windows_font.png

詳細は下記のリンクをご参照ください。

フォントのインストール(Windows 10/8/7/Vista)

tmuxがステータスラインの情報を更新するたびにステータスラインが増えて行く場合

Ambiguous charactersはダメ!
半角文字は半角で、全角文字は全角で処理しなさいと言うことですが、ターミナルでこの設定が有効になっているとPowerlineのステータスラインが更新するたびに増加してしまいます。
私が使っているターミナルの設定方法をご紹介します。

  • iterm2

「Treat ambiguous-width characters as double-width」のチェックを外してください。

スクリーンショット 2017-11-29 12.44.17.png

  • macOSのターミナル

「詳細」タブにて「Unicode 東アジアA(曖昧)の文字幅をW(広)にする」のチェックを外してください。

スクリーンショット 2017-11-29 12.44.54.png

  • rlogin

設定 > スクリーン > ターミナル 順に選択します。
エスケープシーケンスにて「?8428」にチェックを入れて「適用」ボタンをクリックしてください。

setting-up_rlogin.png

tmuxの設定について

今まで行った作業でvimでは綺麗なPowerlineのステータスラインが表示されるはずです。
tmuxを使っている場合、vimと同じくステータスラインを表示させることが可能です。
tmuxでもvim pluginを使うことでPowerlineのステータスラインを生成することが可能です。
詳細は次の記事をご参照ください。

tmuxのステータスバー

Rust入門 for Vimmer

$
0
0
  • Rust導入
curl https://sh.rustup.rs -sSf | sudo sh
  • racer導入
# コード補完ツールっぽい。
cargo install --git 'https://github.com/phildawes/racer.git'
  • rustfmt導入
# シンタックスチェックツールっぽい。
cargo install --git 'https://github.com/rust-lang-nursery/rustfmt'
  • rust-src
# シンタックスチェックするために必要なrust本体のソースコードっぽい。
rustup component add rust-src
  • vimrc
" rustfmt" =======" 保存時に整形letg:rustfmt_autosave =1" rustfmtバイナリパス指定letg:rustfmt_command ="$HOME/.cargo/bin/rustfmt"" rust-racer" ==========" 保存されていないファイルがあるときでも別のファイルを開くことが出来るようにするsethidden" racerバイナリ指定letg:racer_cmd ="$HOME/.cargo/bin/racer"" rust本体のソースコードパス指定let $RUST_SRC_PATH="{$(rustc --print sysroot)/lib/rustlib/src/rust/srcをここに書く}"" export RUST_SRC_PATH="$(rustc --print sysroot)/lib/rustlib/src/rust/src"はしなくていいのかな?成功し次第後で編集します。" rust-doc" ========" rust sysrootのパス指定letg:rust_doc#downloaded_rust_doc_dir ="{$(rustc --print sysroot)をここに書く}"
  • rust.vim
[[plugins]]repo='rust-lang/rust.vim'on_ft='rust'# :RustRun# :RustFmt
  • vim-racer
[[plugins]]repo='racer-rust/vim-racer'on_ft='rust'build='cargo build --release'# <C-x><C-o>
  • rust-doc.vim
[[plugins]]repo='rhysd/rust-doc.vim'# :RustDoc# K# :Denite rust/doc# :Denite rust/doc:modules

rust-doc.vimでrust-doc-open: Failed to open URL, xdg-open: no method available for opening / WSLからrust-doc.vim

$
0
0

エラー全文

rust-doc-open: Failed to open URL: Unescaped left brace in regex is deprecated, passed through in regex; marked by <-- HERE in m/%{ <-- HERE (.*?)}/ at usr/bin/run-mailcap line 528.^@Couldn't find a suitable web browser!^@Set the BROWSER environment variable to your desired browser.^@Warning: program returned non-zero exit code #1^@/usr/bin/xdg-open: 771: /usr/bin/xdg-open: www-browser: not found^@/usr/bin/xdg-open: 771: /usr/bin/xdg-open: links2: not found^@/usr/bin/xdg-open: 771: /usr/bin/xdg-open: elinks: not found^@/usr/bin/xdg-open: 771: /usr/bin/xdg-open: links: not found^@/usr/bin/xdg-open: 771: /usr/bin/xdg-open: lynx: not found^@/usr/bin/xdg-open: 771: /usr/bin/xdg-open: w3m: not found^@xdg-open: no method available for opening '/home/miyagaw61/docs/rust-docs/share/doc/rust/html/std/vec/index.html'^@

環境

  • WSL
  • NeoVim

原因

  • BROWSER環境変数が宣言されていなかった
  • xdg-open が ローカルファイルからの読み込みに対応していない
  • WSLから叩くchrome.exeがパスを解釈できない

解決方法

$ exportPATH=$PATH:/path/to
$ cat << EOF > /path/to/chrome/mnt/c/Program\ Files\ \(x86\)/Google/Chrome/Application/chrome.exe $@EOF
$ exportBROWSER=chrome
$ nvim /path/to/rust.vim/autoload/rust_doc.vim # 僕の場合は~/.cache/dein/repos/github.com/rhysd/rust-doc.vim/autoload/rust_doc.vim# 以下の4行を該当部分に追記function! s:open(item) abort
    echomsg printf("rust-doc: '%s' is found", a:item.name)leturl= shellescape(a:item.path)if g:rust_doc#vim_open_cmd !=''
        execute g:rust_doc#vim_open_cmd urlreturn
    endifif g:rust_doc#open_cmd !=''letoutput= system(g:rust_doc#open_cmd . ' ' . url)if v:shell_error
            call s:error("Failed to open URL: " . output)
        endifreturn
    endif

+    call system('cp ' . url . ' ./rust_doc.html')
+    call system('chrome rust_doc.html')
+    call system('rm -rf rust_doc.html')
+    return

    try
        call openbrowser#open(url)
    catch /^Vim\%((\a\+)\)\=:E117/if has('win32')|| has('win64')letcmd='rundll32 url.dll,FileProtocolHandler ' . url
        elseif executable('xdg-open')&& has('unix')letcmd='xdg-open ' . url
        elseif executable('open')&& has('mac')letcmd='open ' . url
        elseif executable('google-chrome')letcmd='google-chrome ' . url
        elseif executable('firefox')letcmd='firefox ' . urlelse
            call s:error("No command is found to open URL. Please set g:rust_doc#open_cmd")return
        endifletoutput= system(cmd)if v:shell_error
            call s:error("Failed to open URL: " . output)
        endif
    endtry
endfunction

パスを解釈できないchrome.exeでもファイル名だけを引数に渡せば成功するので、無理矢理カレントディレクトリにhtmlファイルをコピーしてchrome.exe <file_name>を実行してその後ファイルを削除しているだけです。

(mac) Visual Studio CodeのVimでNormal modeに戻る際に日本語入力をオフにする

$
0
0

"関"には「つなぎめ」という意味があるそうで、Vimのモード切替え時の「つなぎめ」を少しスムーズにできれば、というテーマです。

何をしたいか

Visual Studio CodeのVim拡張 (VSCodeVim) でNormal modeに戻った際、毎回、日本語入力をオフにするのが大変です。また、オフにし忘れて、カーソル移動でつまずくのも大変です。これをスムーズにしたいと思いました。

カーソル移動でつまずくの図
image.png

Insert modeから escctrl + [でNormal modeに戻った際、日本語入力が有効なままのため、jを入力するとIMEが2文字目の入力や候補の選択待ち状態になっているのかと思います。

やったこと

Normal modeで日本語入力を使わないので、Normal modeに戻る際に日本語入力をオフにするよう、Google日本語入力の設定を変更しました。

手順です。

  • Google日本語入力の環境設定画面を開いて、キー設定を編集する

screenshot.png

  • 「エントリーを追加」を選択して、Ctrl + [のクリック時にIMEを無効化するエントリーを追加

screenshot2.png

簡単ですね。これで少し楽になりました :)

なお、挙動は以下のバージョンで確認しています。

  • Google日本語入力 2.20.700.1
  • Visual Studio Code 1.18.1
  • VSCodeVim 0.10.5

また、Macの標準ターミナルで起動するVimでは日本語入力がオフにならないのですが、AtomのVim拡張やVisual Studio Codeの統合ターミナル内で起動するVimではオフになりました。


gitでコミットする時There was a problem with the editor 'vi' エラー解決法

$
0
0

Mac環境でgitでオプションなしコミットをする時、以下のエラーが出る時があります。
error: There was a problem with the editor 'vi'.
Please supply the message using either -m or -F option.
どうやらvundleを使う時、vimrcをHPの勧めた通り設定したらエラーが出るらしいです(ソース

解決法

git config --global core.editor /usr/bin/vim

gitのデフォルトエディターであるviを呼び出す時、Macは代わりにvimを使います。ここでは直接デフォルトエディターをvimにしたらエラーを解消できました。
vimの居場所が/usr/bin/にない場合

git config --global core.editor $(which vim)

whichを使って取ってきます。

Vim patchダイジェスト [2017/11] (仮)

$
0
0

Vim patchダイジェスト [2017/11] (仮)
(8.0.12428.0.1344)

  • 8.0.1344: GUIで動作している時は'imactivatefunc'および'imstatusfunc'を使用しないようにしました。(関連patch: 8.0.1336)
  • 8.0.1343: :four_leaf_clover:Windows: emojiをカラーで表示するようにしました。描画速度を改善しました。'renderoptions'taamodeの指定が反映されるようになりました。
  • 8.0.1336: :four_leaf_clover:+xim, +multi_byte_imeまたはglobal-imeが有効の状態でコンパイルされていないVimでも'imactivatefunc', 'imstatusfunc'および'iminsert'等の設定をおこなえるようにしました。(関連patch: 8.0.1337, 8.0.1338, 8.0.1340, 8.0.1341, 8.0.1342, 8.0.1344) (関連URI: vim-jp/issues/1118)
  • 8.0.1335: Writefile()でfsync()を使用するとデバイスによってはエラーを発生させる可能性があった件を修正しました。(関連patch: 8.0.1305, 8.0.1339)
  • 8.0.1334: ウィンドウツールバー(:h winbar)のあるウィンドウを:splitするとウィンドウレイアウトが崩れる件を修正しました。
  • 8.0.1332: quickfixウィンドウ内のhighlight項目の属性に runtime/syntax/qf.vim で定義されたもの(qfSeparator等)を使用するようにしました。
  • 8.0.1331: set winminheight=0した場合にクラッシュする可能性があるのを修正しました。
  • runtimeファイル更新: 各種ドキュメントの更新。
  • 8.0.1330: Windowsの:terminalで環境変数VIM_SERVERNAMEが設定されない件を修正しました。(関連URI: vim-jp/issues/1119)
  • 8.0.1328: :term ++closeautocmdの組み合わせでエラーE16が起きる件を修正しました。
  • 8.0.1324: 一部のxtermエミュレータが送ってくるマウス移動イベント0x80を受け入れるようにしました。
  • 8.0.1323: terminalウィンドウ内のマウスイベントが永久ループを起こす可能性があったのを修正しました。
  • 8.0.1318: :four_leaf_clover:terminal内のballoonをいい感じの方法で複数行にしました。balloon_split()を追加しました。balloon_show()がリストを受け入れるようにしました。
  • 8.0.1312: FEAT_BEVAL_GUIを追加し、GUI固有のファイルから共通コードを移動するためにリファクタリングしました。
  • 8.0.1309: :four_leaf_clover:'balloonevalterm'を追加し、terminal内のマウスの動きを処理するコードを追加しました。※GUI Unix用の初期実装です。(関連patch: 8.0.1312, 8.0.1313, 8.0.1318)
  • 8.0.1308: :four_leaf_clover:vimを標準入力からテキストを読込むように起動させた時(:h --)に--not-a-termを指定した場合は、標準出力にVim: Reading from stdin...を出力しないようにしました。
  • 8.0.1305: :four_leaf_clover:writefile()の引数{flags}にsおよびSを追加しました。これらの指定で'fsync'に依存せずにfsync()の呼び出しを制御出来ます。(関連patch: 8.0.1335)
  • 8.0.1304: incsearchがオンの時、//入力後のCTRL-G/CTRL-Tが前回の検索パターンで検索していない件を修正しました。(:h /<CR>)
  • 8.0.1303: termresponse (:h termresponse-variable)でTerminal.appかiTerm2と認識した場合は'ttymouse'sgrを設定するようにしました。
  • 8.0.1299: terminalウィンドウでBracketed paste (:h xterm-bracketed-paste)が正しく動作しない件を修正しました。
  • 8.0.1295: :four_leaf_clover:configureに--enable-autoservernameオプションを追加しました。有効時はVim起動時にサーバ名(:h client-server-name)を自動で定義します。(関連patch: 8.0.1297)
  • 8.0.1294: GUI: terminalウィンドウで<C-W>s<C-W>qすると操作不能になることがある件を修正しました。(関連patch: 8.0.1296)
  • 8.0.1292: ウィンドウツールバー(:h winbar)を素早くダブルクリックするとビジュアルモードになってしまう件を修正しました。
  • 8.0.1291: C言語で*直後の/*をコメント開始と認識してインデントがおかしくなる件を修正しました。
  • 8.0.1290: :undo後にundotree()の返す値seq_curがおかしいことがある件を修正しました。(関連URI: vim-jp/issues/1113)
  • runtimeファイル更新: syntax/tex.vimの文法エラー修正。その他。
  • 8.0.1289: :four_leaf_clover:'viewoptions'curdirを追加しました。:mkviewにローカルディレクトリの情報が含まれるのを抑止出来ます。
  • 8.0.1288: GUI: terminalウィンドウのステータスラインをドラッグ出来ない件を修正しました。
  • 8.0.1287: viminfo用の一時ファイルのpermissionがおかしい場合がある件を修正しました。(関連patch: 8.0.1300)
  • 8.0.1286: channelを使用するとたまにクラッシュすることがある件を修正しました。
  • 8.0.1285: 配布しているautoloadファイルがユーザのファイルと衝突する可能性があるのでリネームしました。(runtime/autoload/filetype.vim → runtime/autoload/dist/ft.vim) ※commitコメントが間違えている
  • 8.0.1284: fileタイプの検出を高速化しました。(関連patch: 8.0.1281, 8.0.1282) (関連URI: tweet)
  • 8.0.1280: Pythonの値"None"をVimのv:noneに変換するようにしました。
  • 8.0.1279: GUI起動時のcolor scheme、keymapおよびcompiler設定の展開を遅延させることで起動時間を短縮しました。
  • 8.0.1278: :four_leaf_clover:'guioptions''k'を追加しました。スクロールバー、ツールバー、タブライン等の追加/削除時にGUIのウィンドウサイズを維持します。
  • 8.0.1277: terminalウィンドウのCRNL変換は問題を起こしていたので止めました。
  • 8.0.1276: term_start()'exit_cb'でterminalウィンドウをcloseすると、次に入力したキーが失われる件を修正しました。
  • 8.0.1275: CmdlineLeaveautocmdが処理されるとFoldを開く動作がおこなわれるべき処理がおこなわれなくなる件を修正しました。
  • 8.0.1274: Foldingを使っているバッファにsetbufline()を使用するとおかしな結果になっていた件を修正しました。(関連URI: vim-jp/issues/1080)
  • runtimeファイル更新: netrwプラグインの大幅な更新。ドキュメントの更新。他
  • 8.0.1268: PCへのインストール手順(src/INSTALLpc.txt)が不完全だったので更新しました。
  • 8.0.1264: terminal debuggerプラグインが小さなウィンドウでフリーズする件を修正しました。
  • 8.0.1263: ユーザがプライマリグループに不注意な場合に他のユーザがswpファイルを読み取ることができる件を修正しました。
  • 8.0.1261: terminalウィンドウ内のプログラムがCRの代わりにNLを取得していた件を修正しました。(関連URI: vim-jp/issues/1103)
  • 8.0.1258: sgr mouseをサポートしていなくても'ttymouse'sgrがセットされてしまう件を修正しました。
  • runtimeファイル更新: gdbおよびNeoMutt設定ファイルのfiletypeプラグインの追加。documentの追記、誤記修正。等々。
  • 8.0.1250: 'hlsearch'のhighlightがincsearch後も残っている件を修正しました。(関連patch: 8.0.1238, 8.0.1304)
  • 8.0.1249: test用共通関数WaitFor()で式の評価時のエラーを無視しないようにしました。(関連patch: 8.0.1251)
  • 8.0.1247: :four_leaf_clover:Debianビルド情報のバッジをREADME.mdに追加しました。(関連patch: 8.0.1248)
  • 8.0.1242: 関数の引数がダッシュ(-)の場合に文字列-ではなく数字の0とみなされていた件を修正しました。

凡例

表記意味
:four_leaf_clover:新機能、大幅な仕様変更
'hoge'オプション (:h options参照)
:hogeExコマンド (:h :index参照)
hoge()組み込み関数 (:h functions参照)
v:hogeVim定義済変数 (:h v:参照)

方針

こちらを参照。


ひとこと

vimtutor summaries

$
0
0

vimtutorのsummaryメモ。
vim使いこなして、圧倒的スピードを手に入れるンゴ!

                               Lesson 1 SUMMARY


  1. The cursor is moved using either the arrow keys or the hjkl keys.
         h (left)       j (down)       k (up)       l (right)

  2. To start Vim from the shell prompt type:  vim FILENAME <ENTER>

  3. To exit Vim type:     <ESC>   :q!   <ENTER>  to trash all changes.
             OR type:      <ESC>   :wq   <ENTER>  to save the changes.

  4. To delete the character at the cursor type:  x

  5. To insert or append text type:
         i   type inserted text   <ESC>         insert before the cursor
         A   type appended text   <ESC>         append after the line

NOTE: Pressing <ESC> will place you in Normal mode or will cancel
      an unwanted and partially completed command.

Now continue with Lesson 2.

                               Lesson 2 SUMMARY


  1. To delete from the cursor up to the next word type:    dw
  2. To delete from the cursor to the end of a line type:    d$
  3. To delete a whole line type:    dd

  4. To repeat a motion prepend it with a number:   2w
  5. The format for a change command is:
               operator   [number]   motion
     where:
       operator - is what to do, such as  d  for delete
       [number] - is an optional count to repeat the motion
       motion   - moves over the text to operate on, such as  w (word),
                  $ (to the end of line), etc.

  6. To move to the start of the line use a zero:  0

  7. To undo previous actions, type:           u  (lowercase u)
     To undo all the changes on a line, type:  U  (capital U)
     To undo the undo's, type:                 CTRL-R

                               Lesson 3 SUMMARY


  1. To put back text that has just been deleted, type   p .  This puts the
     deleted text AFTER the cursor (if a line was deleted it will go on the
     line below the cursor).

  2. To replace the character under the cursor, type   r   and then the
     character you want to have there.

  3. The change operator allows you to change from the cursor to where the
     motion takes you.  eg. Type  ce  to change from the cursor to the end of
     the word,  c$  to change to the end of a line.

  4. The format for change is:

         c   [number]   motion

Now go on to the next lesson.



                               Lesson 4 SUMMARY


  1. CTRL-G  displays your location in the file and the file status.
             G  moves to the end of the file.
     number  G  moves to that line number.
            gg  moves to the first line.

  2. Typing  /  followed by a phrase searches FORWARD for the phrase.
     Typing  ?  followed by a phrase searches BACKWARD for the phrase.
     After a search type  n  to find the next occurrence in the same direction
     or  N  to search in the opposite direction.
     CTRL-O takes you back to older positions, CTRL-I to newer positions.

  3. Typing  %  while the cursor is on a (,),[,],{, or } goes to its match.

  4. To substitute new for the first old in a line type    :s/old/new
     To substitute new for all 'old's on a line type       :s/old/new/g
     To substitute phrases between two line #'s type       :#,#s/old/new/g
     To substitute all occurrences in the file type        :%s/old/new/g
     To ask for confirmation each time add 'c'             :%s/old/new/gc



                               Lesson 5 SUMMARY


  1.  :!command  executes an external command.

      Some useful examples are:
         (MS-DOS)         (Unix)
          :!dir            :!ls            -  shows a directory listing.
          :!del FILENAME   :!rm FILENAME   -  removes file FILENAME.

  2.  :w FILENAME  writes the current Vim file to disk with name FILENAME.

  3.  v  motion  :w FILENAME  saves the Visually selected lines in file
      FILENAME.

  4.  :r FILENAME  retrieves disk file FILENAME and puts it below the
      cursor position.

  5.  :r !dir  reads the output of the dir command and puts it below the
      cursor position.


                               Lesson 6 SUMMARY

  1. Type  o  to open a line BELOW the cursor and start Insert mode.
     Type  O  to open a line ABOVE the cursor.

  2. Type  a  to insert text AFTER the cursor.
     Type  A  to insert text after the end of the line.

  3. The  e  command moves to the end of a word.

  4. The  y  operator yanks (copies) text,  p  puts (pastes) it.

  5. Typing a capital  R  enters Replace mode until  <ESC>  is pressed.

  6. Typing ":set xxx" sets the option "xxx".  Some options are:
        'ic' 'ignorecase'       ignore upper/lower case when searching
        'is' 'incsearch'        show partial matches for a search phrase
        'hls' 'hlsearch'        highlight all matching phrases
     You can either use the long or the short option name.

  7. Prepend "no" to switch an option off:   :set noic

                               Lesson 7 SUMMARY


  1. Type  :help  or press <F1> or <Help>  to open a help window.

  2. Type  :help cmd  to find help on  cmd .

  3. Type  CTRL-W CTRL-W  to jump to another window

  4. Type  :q  to close the help window

  5. Create a vimrc startup script to keep your preferred settings.

  6. When typing a  :  command, press CTRL-D to see possible completions.
     Press <TAB> to use one completion.

リアル脱出ゲーム ~デフォルトシェルがvimになってしまったら~

$
0
0

#学生LT [Part1] Advent Calendar 2017 初日は、いるやんが学生LTで喋りきれなかったネタをお送りします。


皆さんはどんなシェルをお使いでしょうか。
自分好みのシェルがある方はさぞかし chshコマンドにも造詣が深いことでしょう。
ところで、最近のエディタはどんどん進化していて、bashやzshのようなシェルなんて起動しなくとも、エディタさえあれば十分という方も多いのではないかと思います。(いいえ)
そこで、例としてvimをデフォルトシェルにした後に、元に戻す方法を紹介します。
実験環境は Xubuntu 16.04 です。

これで安心していたずらできるね!

アジェンダ

  1. # chsh -s /usr/bin/vim
  2. # chsh <ユーザ名> -s /usr/bin/vim
  3. 1, 2の合わせ技

# chsh -s /usr/bin/vim

chshでシェルを指定するためにはそのコマンドが /etc/shellsに書かれていないといけません。
ところがどっこい、スーパーユーザならなんでも指定できちゃうんです!

# chsh -s /usr/bin/vim

このコマンドを実行後、rootユーザのデフォルトシェルがvimになります。

脱出

vimには :!からシェルコマンドが実行する機能があるのですが、基本的には使えません。
なぜなら、デフォルトシェルを書き換えると、vimがコマンドを投げる先もvimになってしまうからです。

ただ、root権限でエディタが立ち上がっているので脱出は容易です。

まずは chshmanを読みましょう。
すると、ユーザアカウント情報が /etc/passwdに記されているとあるので、root権限のvim上で

:e /etc/passwd

を実行します。
/etc/passwdは以下のようなファイルになっているので、1行目をサクッと書き換えちゃいましょう。

root:!!:0:0:root:/root:/usr/bin/vim
(略)

/usr/bin/vimをフルパスのシェルのコマンド(例えば /bin/bash)に書き換えて、 :wqで保存。
再ログインすれば脱出完了、のはずです。

# chsh <ユーザ名> -s /usr/bin/vim

今度はroot以外のユーザのデフォルトシェルをvimにしてみます。
デフォルトシェルの反映は一旦ログアウトしてから、です。

脱出

例によって :!は使えません。
また、root権限のvimではないので /etc/passwdを直接編集することもできません。

なので、vimからなんとかroot権限を取る方法を考えます。
幸いにして、vimには対応している言語の処理系を呼び出す方法があります。
今回はpython3コマンドを使って、 sudoコマンドを実行します。

:python3 import os; os.system("sudo chsh <ユーザ名> -s /bin/bash")

パスワードを要求されるので、タイプします。
再ログインすれば脱出完了、のはずです。

別解

  • Shougo氏のプラグイン VimShell を使ってシェルを立ち上げる

1, 2の合わせ技

だんだん脱出が楽しくなってきましたね。
rootと一般ユーザの両方のデフォルトシェルがvimになってもやることは変わりません。

脱出

一般ユーザの時の脱出と同様にroot権限を獲得することを目指します。
ですが、 sudo chsh <ユーザ名> -s /bin/bashは失敗します。
どうやらPAMを通すタイプの認証はvimがデフォルトシェルになっているとダメらしいです。

こうしましょう。

:python3 import os; os.system("sudo su")
:e /etc/passwd

一旦rootにログインして、root権限のvimを立ち上げてから /etc/passwdを前述の方法で書き換えます。
一般ユーザのデフォルトシェルも一緒に書き換えておくと完全に脱出できると思います!

おわりに

Linuxは壊して直してが楽しいし勉強になるし、積極的に壊していこう!

Vim8とNeovimと私(Vim初心者)

$
0
0

neocomplete.vimからdeoplete.nvimに乗り換え〜とか思ったんですが、使ってたvim8だと導入めんどくさそうとか思って、軽い気持ちでNeovimに手を出してみたら結局いろいろめんどくさかったけど、結果ちょっと快適になったかもしれないとかそういう話です。
自分用の忘備録としてまとめます。
Vimを使い始めて2年目、(フロント)エンジニアリング歴も同じくらいのデザイナーが書く記事なので、Vimmer先輩諸氏におかれましては、気になる部分とか色々あるかと思いますが、HRTの精神で編集リクエストやコメントなどしていただけるとありがたく思います。

初めてのNeovim

Neovim
次世代のVimと言われているようです。Vim歴1年半くらいのぺーぺーなので突っ込んだところはよくわかってません。
VimからForkして開発されてるってことくらいしかわかってません。でもVimとほとんど変わりません。Vimと互換性があるようで大抵のVim scriptとかオプションはそのまま使えます。
あとはセルフチェック機能があるとか…それくらいですかね。噂ではVimより若干早い…のかなぁ(体感的にはあまり感じてないです)。

基本的には公式のドキュメントを見ればインストールとかのセットアップは出来ます。
Vimで使ってる.vimrcとかもそのまま使えたり.vimも使えたりするようです。
私の場合は、まずはNeovimとDeoplete.nvimを試しに使ってみたいというのと、vimrcファイルがプラグインとかキーマッピングの設定とかがとにかくごちゃごちゃしてるのを「この際だからtomlファイルとか使って整理したいなぁ」とか考えたんで、VimとNeovimの設定の共有はしないことにして、別々に管理することにしました。

とりあえずな感じですが、設定ファイルはこの辺に突っ込んであります。
redbear/nvim at master · ksm240/redbear · GitHub

ディレクトリ構造はこんな感じになってます。
.vim配下はいろいろ入りすぎてるので端折ってます。

├── .bash_profile
├── .bashrc
├── .git_commit_template
├── .gitconfig
├── .gitignore_global
├── .vim
├── .vimrc
└── nvim
    ├── dein.toml
    ├── dein_lazy.toml
    ├── init.vim
    ├── lightline.vim
    └── rc
        └── vim-airline.rc.vim

.vimはGithubに突っ込んでいろんな環境で使えるようにしてますが、Neovimのプラグインをインストールするディレクトリはここには入れてません。特に理由らしい理由はないんですが、init.vimdein.tomlとかがあれば初回起動時に指定したディレクトリにインストールされるのでわざわざバージョン管理しなくてもいいかなって思っただけです。
Githubのリポジトリの中身を見たら分かるんですが、dein_lazy.tomlの中身はまだ空のままです。
というのも、lazy_loadの使い所がよくわかってなくて、参考にした記事とかを見ると、deoplete.nvimとかの設定はlazy.tomlに書くのが一般的なんですかね…よく分かってないのでとりあえず全部dein.tomlに突っ込んでます。
そんな感じなのでlazy.tomlはまだ空の状態です。そのうち整理したい(…)。

いわゆるPowerline的なStatuslineのアレ

image.png

一番最初はPowerlineを使っていましたが、クリーンインストールなどしたときに最初のセットアップが結構めんどくさいなぁ(Pythonを有効化したりとか…)と思って、lightline.vim使ってみた時もありました。しかしこれはこれで表示をいい感じにするのに設定めんどくさくなって今はvim-airlineを使ってます。
…………DeopleteでPython3有効にしたならPowerlineに戻っても良かったのでは…って思わなくもないです。でも、vim-airlineはthemeがあるので、使ってて楽しいなぁって思うので、入れてよかったって思います。こういうの大事だって思い込んでます。
ちゃんと調べてないのでわかりませんが、Powerlineもthemeとかあったりするんですかね?

ついでだからUnite.vimからdenite.nvimにした話

多分、きっと早い。正直私のようなペーペーにはよく分からない領域の違いなのかなって思ってます。あー、でもpattern検索は確かに早かったかもしれない……多分。

肝心のDeopleteどうよっていう話

補完は大事だ。
使い心地はneocomplete.vimと変わらず快適に使えてます。
ただ、導入がちょっとめんどくさいなって思いました。Neovimだと比較的手軽に入れられるかなって思いましたけど、Vim8はpython3が有効化されてなかったりするとVimを再インストールから始まったりとかあるからちょっとめんどくさそうだなぁって思ってます。(Neovimの設定いじってる間にVim8対応したよっていうのが来たんですけど、ドキュメントちょっと眺めて「めんどくさそうなぁ」って思って後回しにしたんですよね……ガチVimmerな人はそんなことないのかもしれないけど)

設定してて詰まったところとかのメモ

カラースキーム

Vim8でもそうだったんですが、 iceberg.vimを設定しようとしたら、なんかモノクロームっぽい画面で、「明らかに公式サイトのプレビューの色と違う」って感じになっててちょっとつまりました(キャプチャ参照)。
image.png
「明らかに公式のプレビューと違うだろ、これ」っていうときのキャプチャがこちら。

原因は:set termguicolorsになってなかったのが原因でした。
ほかのカラースキームは特に設定してなくても普通に使えてたんですけど、iceberg.vimは設定しないとモノクロームな世界になってしまいましたね。ggっても似たようなことになって詰まってるみたいな記事は見かけなかった気がするので、きっと私の設定の問題だったと思います。
ggりまくって知ったのはVimのシンタックスハイライトとカラースキーム周りで詰まったら、大体以下の設定を確認してみると解決するかもしれません。
* 使ってるターミナルのカラー設定
* rcファイルで:set termguicolorsがされるか
* 上に同じく、:set syntax onとか:set syntax enableとかになってるか
* xterm-colorの設定(参考は公式ドキュメントに書いてあります。syntax - Vim日本語ドキュメント:h xterm-colorで見れる)
などなどなど。
ちなみになんですけど、Neovimはローカライズされてるのですこし助かりますね。

おまけ:おすすめカラースキーム

追記

https://qiita.com/ksm240/items/5cd62fdd15d95d21d173#comment-53ec65869d15dff4ba76
icebergのカラーコードを公開している方からコメントをいただきました!ありがたい!
GitHub - 39e/slack-iceberg: Color theme for slack

設定ファイルを複数のMacで共有するためのシンボリックリンクの設定

本業の方からしたら「何を今更…」な話なんですがln -sするとき、大体$HOMEで作業すると思うんですが、この時にめんどくさがって

$ ln -nvfs redbear/nvim/init.vim .config/nvim/init.vim

とかすると、/redbear/nvim/init.vimを参照してしまって、catすると中身が空っぽの別ファイルになってることがわかります。
つまり、「ちがうそうじゃない」ってことですね。

$ ln -nvfs ~/redbear/nvim/init.vim ~/.config/nvim/init.vim

ってしないとダメなんですって。
先輩エンジニアさんに「パス操作するときは相対パスと絶対パスを意識せよ」というアドバイスをいただきました。ひとつ利口になった赤いくまです。

todo

  • プラグインごとのキーマッピングとかの設定は**.rc.vimとかにして管理したいかも。
  • Vim8もdeopleteに切り替えたいかも。
  • Vim8もvim-airlineにしてもいいかもしれない。
  • つまりvim8でもいいのでは。(身も蓋もない)

Vim Conf 2017行きたかった人生でしたねぇ。

最後に宣伝ですが、groovesっていう会社ではデザイナーを募集してます。
「フロントエンドやってるけど、UX/UIデザインとか興味があってアジャイルな開発チームに興味がある」っていう方がおられましたら、お気軽に「話を聞きに行きたい」していただけるとデザイナー陣がめっちゃ喜ぶのでよろしくお願いします。ざっくばらんに情報共有でも歓迎です!リモート面談も歓迎です〜。
詳しくはWantedlyの求人ページへ

vim で挿入モードのまま左右に移動する

$
0
0

方法

以下を .vimrc に追加することで、ctrl+h で左に移動、ctrl+l で右に移動できるようになる。

inoremap ^H ^[hainoremap ^L ^[la

解説

ctrl+h を押したときに挿入モード離脱->左に移動->挿入モードに戻るという動作をするようにしている。

vim で一発でコメントアウトする

$
0
0

コメントアウトする(#追加)

noremap<S-s>k$ i#<esc>

これはインデントを無視して行の一番左側に#を追加するというもの。
言語によってはこの部分を//とかに返る必要あり。
普段 shift+s は使わないので、こちらをコメントアウト用に使うことにした。

コメントアウト取り消し(行頭の一文字削除)

noremap s k$ x<esc>

こちらも普段使わない s を割り当てた。


【vi】複数行を一気にコメントアウトする方法

$
0
0

①Ctrl + V で「ビジュアル 矩形(くけい)」にして、コメントアウトしたい範囲を選択する

②Shift + i で「挿入モード」にして、「#」等を入力する
 ※この時点では1行分#が入力される

③ESC を押し、「↓」ボタンを押すとコメントアウトされる

こんな私でも Vim が好きと言いたい

$
0
0

自己紹介的な

まあ、まずは私の vimrc を見てくださいよ。

" complementsetwildmode=list:longest" editsyntaxonfiletype plugin indent on" encodingsetencoding=utf-8setfileencodings=utf-8,iso-2022-jp,euc-jp,sjis" searchsetignorecasesetsmartcasesetincsearchsetnohlsearch" formatsetexpandtabsetshiftwidth=4setsofttabstop=4settabstop=4setautoindentsetnumbersetcursorline" displaysett_Co=256setbackground=darkcolorscheme hybridhighlight Normal ctermbg=none

びっくりするくらいシンプルでしょ。
せっかくだから ~/.vim/ の下も見ていきますか?

vim-directory.png

清々しいでしょ。

じゃあお前は Vim の何が好きなんだ

って、言われると困りますけど、このような最低限ほしいものだけを入れている vimrc で使ってても、標準的なキーバインドのエディタ使うよりは圧倒的に早く編集できますよね。それで私にとっては充分です。しいていえば、Vim のキーバインドが好き、ということになるんでしょうかね。

なので

素の状態でも便利な Vim をぜひぜひ気軽に使ってほしいと思う今日このごろなのでした。

【ほぼ自分語り】僕がVimを使い始めた理由とSpaceVim

$
0
0

この記事は チームスピリット Advent Calendar 2017の3日めの記事です。中級以上の
Vimmer にはほとんど関係のない話になります。

Vim のなにがいい?

  • 豊富なプラグイン
  • 無理のないキーマッピング
  • テキストオブジェクトという概念

Vim との出会い

  • 大学に入って初回のプログラミング講義が Vim の講座だった。
  • 初回講義だけ Vim を使わされた。

Vim への最初の印象

  • 言語に沿った補完はない。文法チェックもインスペクターもない。Emmet/ビルド/デバッグ/実行機能もない。
  • H, J, K, Lがどうやったら左下上右と認識できるのか教えて欲しい。
  • 入力を終える度に Escを押しにいくのは面倒くさい。しかも押しにくいキーでもある。
  • 便利と言いつつ紹介してきた教授すら操作がもたつく。
    • その教授は普段は gedit 使いだったそう。なぜ薦めてきた。

Vim の凄い奴に出会った

  1. 最初に就職した会社で Vim の凄いやつに出会った。
  2. 「え!? コーディングに!? Vim!? 大丈夫!?!?(笑)」みたいなノリだったが、華麗なコーディング作業を見て閉口。
    • キャレットの移動にほとんど時間を使っていない。編集する箇所に自由自在にカーソルが飛ぶ。
  3. 「び、Vim キーバインドじゃなくてもエディタ機能でそれ位できるし!」と心の中で強がる。だがキーバインドを覚えてないし、普段使ってもない。

冷静に考えてみた

  • 先程の「機能はたくさんあるけど覚えきれない」は普通のエディタの最大の泣き所。普通のエディタは入力モードしかない上に1入力1操作という原則があるので使えるキーマップが少ない。そうすると操作内容と全く脈絡のないキーにマッピングせざるを得ないのである。
  • コーディングというのはコードを書く時間よりも、書かれたコードを読む時間や修正する時間の方が圧倒的に長かったりする。そう考えると、一度入力モードから抜けてから、カーソルの移動を楽に行えるようにするというのは理にかなってる。

Vim を使い始めた

  1. 最初はシェルで vimtutorを実行してチュートリアルから始める。
  2. 普段使っている IntelliJ IDEA や VSCode にプラグインを入れて Vim のキーバインドにしてみる。
  3. Neovim の設定ファイルをカスタマイズし、仕事に必要な機能(Emmet/構文ハイライト/チェッカー/Linter/フォーマッター/ランナー)や Fuzzy Finder などをプラグインで補う。

Vim を使ってみて分かったこと

  • 最初の1ヶ月は進捗が犠牲に。
  • Vim の恩恵を受け始めたのは2ヶ月を超えたあたりから。

  • H, J, K, Lが左下上右にしか見えなくなってきた。

  • テクスト編集系のマッピングは多そうに見えるが、そのほとんどが実は モーション + テキストオブジェクトのマッピングになっているので覚えることはそこまで多くない。

    • ci" -> Change Inner " -> "で囲まれた中のテキストを編集
    • da" -> Delete Around " -> "で囲まれたテキスト( "を含む)を削除
    • dip -> Delete Inner Paragraph -> キャレットのある段落を削除
  • Escは押しにくいというのは Vimmer の間でも共通する認識であり、殆どが Ctrl-[で代用するか jjにリマップしている。

  • プラグインのほとんどは遅延ロードに対応する設計になっており、とにかく起動が早い! dein.vimという神器を使いこなすことでプラグインを200個入れても0.7秒程度で起動します。

    • dein.vimというプラグインマネージャーは複数のプラグインのファイルを結合して stateと呼ばれるファイルを生成することで、プラグインのロード時間を爆速にします。
    • 0.7秒もそこそこ長いのでシェルで作業するときは Ctrl+Zで suspend するか画面分割を使います。
  • 使いこなせば便利! しかしカスタマイズが面倒くさい! 最初からプラグイン込みでセットアップされた Vim が欲しい!

SpaceVim

SpaceVim

SpaceVim/SpaceVim: A community-driven vim distribution inspired by spacemacs

  • 厳密には Vim ではなく、膨大な Vim の設定ファイルである。Vim と Neovim に対応している。予め200個近いプラグインがインストール&セットアップされている。
  • レイヤーという概念があり、ユーザーはプラグイン単位ではなく、利用する機能によってレイヤー単位で使うか使わないかをカスタマイズする。
  • キーバインドをど忘れしても、最初のキーを押せばガイドが表示されるので、キャッチアップしやすい!
  • 一部 Vim の標準キーバインドを上書きするので賛否両論がある。

SpaceVim を使ってみて分かったこと

  • とにかく便利機能が多い!
  • ドキュメントが圧倒的に少ない&古い!
  • ドキュメントが少なすぎてソースコードを直接読む -> PR で小さな修正を送り続ける -> いつの間にか SpaceVim のコミュニティ入りに。
  • 使おうと思ってる機能が既にセットアップされているのは嬉しい! が、今の所キーマッピングを調べる時間で相殺されている。

SpaceVim 結論

  • SpaceVim は正直言ってポテンシャル採用している部分はある。
  • Vim 全体に言えることだが、やはりプラグインの組み合わせではIDEの言語機能の品質を完全には到達できないというのが現状。
    • Vim はすぐに使えるという反面、ワークスペースやプロジェクトの情報を殆ど与えられていない。
    • 複数のプラグインで実現したとしても、プロジェクトのコードを解析するデーモンがプラグイン別に2つ走ったりするので効率もよろしくない。
    • しかし Language Server の普及により、近い将来的に IDE 並の言語機能が Vim から扱えるようになると思っている。
  • 多くの人が同じような .vimrcを記述するのに時間を費やすのは無駄だよね、というモチベーションで支持しているし、たまにPRを送る。

おしまい。

Vimで快適に英語を読み書きする

$
0
0

はじめに

この記事は,SLP KBIT Advent Calendar 2017 4日目の記事です.

Vimで英語を書くときに便利なテキストオブジェクト

コードを編集する上では,あまり使われないが英文を書く上で便利だと自分が感じるテキストオブジェクトの紹介をします.

sentence

[motion]is or [motion]asで分単位のテキスト操作ができます.
[motion]yがヤンク, iがinner aが a などがありますね.

gifアニメの例では,yank しています.

b.gif

vim内における文の定義は,:h sentenceで確認できます.
簡単に要約しておきますと, '.', '!', '?'のどれかの文字が存在し,その文字のあとに空白 or タブ文字があるとき,その箇所が文の末尾となります.

paragraph

[motion]ip or [motion]apで段落単位のテキスト操作ができます.

b.gif

段落はそれぞれ空行の後または,段落マクロのセットから始まります.
段落マクロは 'paragraph'オプションで指定されている,文字のペアです.
デフォルトでは IPLPPPQPP TPHPLIPpLpItpplpipbpです.
(nroffマクロと言うものらしい)空行は,段落の区切りではない.(helpより)

同じ単語を探す

*

これは,英文を読むとき,書くときに限らずよく使います.
カーソルを探したい単語の上に持っていき,*を押下.
再度 *を押すことで次のヒットに移動することもできます.
#は逆方向になります.

b.gif

検索の応用

/

Vim の検索といえば /です.これは皆さんご存知だと思います.
実は,検索時にカーソルのoffsetを設定することができます.
これを応用すると,ある単語のあとに単語を挿入するということを連続したい場合,楽ができます.

例えば,theのあとにhogeを挿入したい場合,

/the/s+3<CR>した後に,
aで 挿入モードに入り,
hogeを入力し
あとは,n.n.n.n.を繰り返すのように使えます.

b.gif

これと同等のことは,置換でも可能です.

b.gif

スペルチェックをおこなう

Vimはデフォルトでスペルチェック機能を持っています.
これはスペルに自信がない自分にとって,非常にありがたく重宝しています.

スペルチェックは, :set spellで可能です.
日本語混じりな環境で使用する可能性がある場合は,vimrcに次の設定を書いてきましょう

vimrc
setspelllang=en,cjk

スペルミスと思われる単語の箇所の上で, z=を押下することで修正候補一覧から単語を選択し,
修正することができます.

b.gif

スペルミスしている単語には,]s (前方検索) や [s(後方検索) でジャンプすることができる.
また,zg で 単語を辞書に追加することもできる.

b.gif

(備考 : 上のデモでは デフォルトだとスペルミスと判定される単語が一部辞書に登録済みになっています)

スペル補完する

<C-x>sで スペル補完を行うことができます.ユーザーが追加した単語も
保管することができます.

b.gif

自分はこれはあまり使わず,間違えていてもいいのでそれっぽいスペルで単語書いてからz=することのほうが多いです.
プラグインなどと組み合わせて自動補完を有効にすると良いかもしれません.

単語の意味を即座に調べる (OSX only)

vimrcに次のような設定を記述する

vimrc
nnoremap,? :!open dict://<cword><CR>

そして,意味を調べたい単語の上で ,?を押下すると,macにプリインストールされている
辞書が立ち上がり意味を確認することができる. [1]

b.gif

グーグル翻訳する

haya14busa/vim-open-googletranslateというプラグインを導入すれば,Vim内から素早くグーグル翻訳を立ち上げることができます.

b.gif

参考

vimを触った事がない人へ最低限の知識で編集する

$
0
0

先日

IDEを中心で使っているエンジニアに
crontabの書き換えを教える必要がありましたが
そもそもvimの操作ができないと説明が難しかったので
普段IDEやGUIを中心で使わない人へ急ぎ
「vim使える?」 となった場合に
「簡単な修正なら・・・」 と言えるようになって欲しい!!

必ず使うvimのモード

  • ノーマルモード (起動した直後の最初のモード)
  • インサートモード (ノーマルモードからiを押すと入れるモード)

があります。(他にも便利なモードがあります)

起動した時(vim program.php や crontab -e 等)

最初はノーマルモードで実行されます。
直接的な文字の入力はできませんがiを押すことでインサートモードに入ることができます。
ESC でノーマルモードに戻れます。
起動 -> i (インサートモードに) -> ESC (ノーマルモードに) -> i (インサートモードに) -> ... -> :wq か :q!
超簡単にはこのような編集の流れです。

ノーマルモードでやること(起動した直後)

  • ファイルを保存して終了
  • ファイルを保存しないで終了
  • 元に戻す
  • やり直し

をやりたい時はノーマルモードで!

インサートモード

  • キーボード入力で文字を入力したい

をやりたい時はインサートモードで!

モードがわからなくなったら

ESCを押してノーマルモードに戻りましょう、連打しても良いです。
(それでも戻れなかったら:qかもしれませんがほとんどはESCでノーマルモードに戻れます)

ノーマルモードでのコマンド一例

:q!

ファイルを保存せずに終了する。

:wq

ファイルを保存して終了する。

hjkl

カーソルを移動する
hで左、jで下、kで上、lで右

u

元に戻す

ctrl-r

やり直し

:set number

行数を表示します。

まとめ

  1. 起動したらiでインサートモードに入り編集する
  2. 修正が終わったら ESC を押してノーマルモードに戻る
  3. OKなら :wq で保存、 やっぱやめたなら :q! でとりあえず編集できます!

他にも

vimにはとても便利な機能がたくさんあります。
文字を入力して保存できるぐらいは安心してできるようになったら
他のノーマルモードでのコマンドやヴィジュアルモードを使ってみてください。
ノーマルモードからi以外でもインサートモードに入る便利な色々ありますので興味を持ったら他のコマンドも

注意

crontab の編集は必ずしもvimが動くわけではありません。環境により異なる場合があります。

Viewing all 5608 articles
Browse latest View live


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