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

脱初心者を目指すなら知っておきたい便利なVimコマンド20選 (Vimmerレベル診断付き)

$
0
0

はじめに: Vimならではの便利機能をマスターしよう!

かれこれ数年前、僕がVim(というか、たぶんVi)と初対面したときは、「なんて使いにくいエディタなんだ!!」と最悪の印象でした。

しかし、周りのプログラマやネット上のエンジニアたちはみんな「Vim便利!」「Vim最高!」と言います。
なのでその言葉を信じ、僕も最悪の印象だったVimともう一度正面から向き合うことにしました。

そして、月日が過ぎ・・・僕もいつしか「Vim便利!」「Vim最高!」と叫ぶようになってしまいました!!

これって洗脳?

いやいや、洗脳じゃありませんw

Vimにはメモ帳の延長線上にあるエディタでは実現できないような数々の便利な機能があります。
覚えるまでにはちょっと苦労しますが、覚えてしまえばメモ帳系のエディタでは追いつけないようなスピードでテキストを編集することができます。

とはいえ、そもそも覚える以前に「そんなコマンドがあるとは知らなかった」というのであれば、いつまで経っても作業効率は上がりません。

そこでこの記事では「これはVimならではだね!」と僕が個人的に感じている 便利機能ベスト20をまとめました。
さらに、言葉だけではその便利さが伝わりにくいので、すべてアニメーションGIF付きで説明しています。

Vimは使い始めたけど、まだイマイチ便利さがわからない、もっと便利な機能があるかもしれないけど、面倒くさくて調べてない、というVim初心者の方はぜひ参考にしてみてください!

また、本文の最後であなたの「Vimmerレベル」を診断するおまけコーナーも載せていますw

この記事ではMacVimを使っています

僕が普段使っているのはMacVimです。
動作確認もMacVimで行っています。
ただし、この記事で紹介している機能はMacVim以外のVimでも同じように動作するはずです。

Vim.png

(2014.06.12 17:00追記) さらに便利コマンドを追記するかも?

ネット上の反応を参考にしながら後日「みんなが知らなさそうな便利コマンド」をさらに追記するかもしれません。
この記事を「ストック」してもらうと、便利コマンドを追記した際に変更通知を受け取ることができます。
追記されるコマンドが気になる方は ストックをどうぞ!

カーソル移動・画面スクロール系

w/e/b/W/E/Bを使い分けて単語単位に移動する

ノーマルモードでwとタイプすると、次の単語に移動します。
eは単語の最後の文字に移動します。
bは手前にある単語の先頭に移動します。

また、W/E/Bとタイプすると、ドット(.)やコロン(:)のような記号もひと続きの単語とみなして移動します。

ewb.gif

3wのように数字を付けてタイプすると「3つ先にある単語へ移動」という意味になります。

状況に応じて適切な移動用コマンドを使い分けると効率的です。

H/M/Lでカーソルをウインドウ内の上/中/下に移動させる

ノーマルモードでHとタイプすると、カーソルが現在表示されているウインドウ内の一番の上の行に移動します。
同様にMで中央、Lで最下行に移動します。

HML.gif

z<enter>/z./z-で現在のカーソル位置を基準に画面をスクロールさせる

ノーマルモードでz<enter>(またはzt)とタイプすると、現在カーソルのある行が画面の一番上になるように画面がスクロールします。
同様に、z.で中央、z-で一番下にスクロールします。

zzz.gif

Ctrl-f/Ctrl-b/Ctrl-e/Ctrl-yで画面を上下にスクロールさせる

ノーマルモードでCtrl-fとタイプすると1画面分下へスクロールします。
Ctrl-bは1画面分上へスクロールします。

Ctrl-eは画面を1行分下へスクロールさせます。
Ctrl-yは1行分上へスクロールさせます。

c-e.c-y.gif

編集系

i/a/s/cw/I/A/S/Cを使い分けて挿入モードに入る

ノーマルモードでiとタイプすると、カーソルの左側に文字が挿入できるようになります。
aとタイプするとカーソルの右側に文字が挿入できます。
sはカーソル上の1文字を削除してから挿入モードに入ります。
cwはカーソル上の単語を削除してから挿入モードに入ります。(単語の途中にカーソルがある場合は、そこから単語の末尾までを削除します)

また、Iは行の先頭から、Aは行の末尾から文字を挿入できます。
Sは行全体を削除してから挿入モードに入ります。
Cは現在のカーソルから行末までを削除してから挿入モードに入ります。

iasc.gif

どれも基本のVimコマンドですが、状況に応じて一番タイプ量が少なく済むコマンドを選べるようになりましょう。

v/c/d/y + f/t/F/T/w/Wの組み合わせを駆使してテキストを編集する

ノーマルモードでf+(任意の文字)とタイプすると、fの次にタイプした文字にカーソルが移動します。
たとえば、faとタイプしたときは次に出現するaにカーソルが移動します。

数字と組み合わせることもできます。
たとえば、2faはふたつ先のaに移動します。

t+(任意の文字)fによく似ていますが、指定した文字の 一つ手前にカーソルが移動するのがfと異なる点です。

F/Tf/tの逆で、カーソルの手前にある文字を探してそこへ移動します。

さて、以上の内容を踏まえた上で、ここからがこのセクションの本題です。

f/t/F/Tはカーソルを移動させるだけでなく、v/c/d/yと組み合わせて使うこともできます。
たとえば、vfaは「次に出現するaまでビジュアル選択する」という意味になります。
c2t(であれば、「二つ先に出現する"("の手前まで削除して挿入モードに入る」という意味になります。

また、v/c/d/yf/t/F/Tだけでなく、w/W(単語選択)と組み合わせるのも効果的です。
たとえば、ywとタイプすると単語全体をヤンク(コピー)します。(カーソルが単語の先頭にある場合)

ftw.gif

このようにコマンドの組み合わせを駆使して、狙った範囲を素早く選択したり削除したりすると非常に効率よくテキストを編集できます。

ci'/dat/vi{/ya"のようなコンビネーションを使い分けてテキストを編集する

ノーマルモードでci'とタイプすると、シングルクオートの内部にある文字列を削除して挿入モードに入ります。
ca'とタイプすると、シングルクオートで囲まれた文字列をシングルクオートごと削除して挿入モードに入ります。

ci"であればダブルクオートで囲まれた文字列を、ci{であれば中括弧({})で囲まれた文字列を、citであればHTMLタグで囲まれた文字列をそれぞれ編集できます。

cの変わりにdを使ってdi'とタイプするとシングルクオートの内部にある文字列を削除します。(挿入モードには入らない)

va'であれば、シングルクオートで囲まれた文字列をシングルクオートごとビジュアル選択します。

このように、

c/d/v/y + a/i + (文字列を囲む記号)

というコンビネーションで、何かに囲まれた文字列を編集したり削除したりすることができます。
HTMLタグで囲まれた文字列を編集するときは記号ではなく、tで指定する点にだけちょっと注意してください。

ai-combi.gif

応用テクニックとして、d2i{のようにタイプすると、2つ外側にある{}の内部文字列を削除したりできます。({}がネストしている場合)

J/gJで行を連結する

ノーマルモードで複数行をビジュアル選択してJとタイプすると、選択された行を連結することができます。
行を連結したときは半角スペースが境目に入ります。

この半角スペースが不要な場合はgJとタイプします。

j-gj.gif

3Jのようにタイプすればビジュアル選択せずに3行分を連結する、ということも可能です。

Ctrl-vで矩形選択する

ノーマルモードでCtrl-vとタイプすると、矩形選択がスタートします。
矩形選択した状態でdとタイプすれば、その範囲を削除できます。
sまたはcとタイプすれば、その範囲を削除した後に挿入モードに入ります。
IまたはAとタイプすれば、選択範囲の先頭または末尾にカーソルが移動して挿入モードに入ります。

C-v.gif

矩形選択+$+Aで、長さの異なる複数行の行末に同じ文字列を追加する

複数の行に渡って同じ文字列を行末に追加したいと思った場合、各行の長さが揃っている場合は矩形選択+Aで編集できますが、長さが揃っていない場合はちょっとひと工夫必要です。

この場合は、まず行方向に矩形選択(Ctrl-v+j)し、次に$をタイプします。(全行を行末までビジュアル選択)
そのあとにAをタイプすると、長さが異なる行であっても同じ文字列を行末に追加できます。

insert-at-tails.gif

>>や複数行選択&>でインデントを変える

ノーマルモードで>>とタイプすると、その行のインデントを1つ増やせます。
反対に<<とタイプすると1つ減らせます。

複数行をビジュアル選択した状態で>とタイプすると、選択した行をまとめてインデントできます。

また、数字と組み合わせてインデントを実行することもできます。
たとえば、2>>とタイプすると、2行に渡ってインデントを1つ増やします。

一方、複数行を選択した状態で2>とタイプすると、その範囲でインデントを2つ増やせます。

indent.gif

複数行選択するときとしないときとで、数字の意味が異なる点に注意してください。

Ctrl-a/Ctrl-xでカーソルの下にある数字を増減させる

ノーマルモードでCtrl-aとタイプすると、カーソルの下にある数字を1つ増やせます。
Ctrl-xは反対に数字を1つ減らします。

C-a.C-x.gif

挿入モードに入らなくて済むのでちょっと便利です。

r/Rを使って1文字/複数の文字を上書きする

ノーマルモードでr+(任意の文字)とタイプすると、カーソルの上にある1文字を上書きします。

また、R+(任意の文字列)+(ESC)とタイプすると、ESCを押すまで上書きを続けます。

rR.gif

~/u/Uで大文字/小文字を切り替える

ノーマルモードで~とタイプすると、カーソルの上にある文字の大文字/小文字を切り替えることができます。
ビジュアル選択している場合に~をタイプすると、選択範囲内にある文字の大文字/小文字を反転させます。

また、ビジュアル選択中にuとタイプすると、選択範囲内にある文字をすべて小文字にします。
Uは反対にすべて大文字にします。

uU.gif

Ctrl-p/Ctrl-nで単語補完する

挿入モードで初めの数文字をタイプし、Ctrl-pまたはCtrl-nとタイプすると、現在開いているバッファの中からその文字列で始まる単語を補完の候補として選択することができます。

C-p.C-n.gif

Ctrl-pは「カーソルの前にあるキーワードと合致する単語を逆方向に検索して挿入」、Ctrl-nは「カーソルの前にあるキーワードと合致する単語を順方向に検索して挿入」という違いはありますが、僕はあまり気にせずにいつもCtrl-pを使っています。

検索・置換系

正規表現検索を使いこなす (Perl系と記述が異なるメタ文字を理解する)

ノーマルモードで/hogeのようにタイプすると、テキスト中に現れる文字列"hoge"を検索できます。

/で検索するときは正規表現が使えます。
たとえば、/^\dのようにタイプすると、「行頭に現れる任意の数字を検索」という意味になります。

ただし、Vimの正規表現で使うメタ文字はPerl系の正規表現で使うメタ文字と少し異なります。
いくつかのメタ文字はバックスラッシュと組み合わせて使う必要があるので、Perl系の正規表現に慣れている人でも注意が必要です。

メタ文字意味
\(hoge\)文字列"hoge"をキャプチャする
hoge\|piyo"hoge"または"piyo"を検索
Regexp\?"Regex"または"Regexp"を検索(pが0または1個)
go\+gle"gooooogle"のような"o"が1個以上連続する"go..gle"を検索
go\{2,4}gle"google"や"goooogle"のように"o"が2個以上4個以下で連続する"go..gle"を検索

上記のメタ文字はバックスラッシュを付けないと普通の文字として検索されます。
たとえば、/go+gleは純粋に"go+gle"という文字列を検索します。

regex.gif

grep検索を活用する

Vimのgrep検索はバリエーションが豊富なので、詳細に説明するとそれだけで一つの記事になってしまいます。
ここでは一つだけ使用例を示します。

ノーマルモードで:vimgrep 'class [A-Z]' **/*.rb | cwのようにタイプすると、拡張子が.rbになっているファイルを対象にして、「class (任意の大文字)」を含む行を検索します。
最後の| cwは検索実行後にQuickfix Listを表示するための命令です。

:cnまたは:cpで次または一つ前の検索結果へ移動することができます。
Quickfix Listから検索結果を選択してジャンプすることもできます。

grep.gif

ただし、僕はfugutive.vimプラグインを使って:Ggrepコマンドで検索することが多いです。
:Ggrepを使うとgitで管理されているファイルだけを対象にして検索することができます。

fugutive.vimについてはこちらのweb記事を参考にしてください。

その他、grep検索に関する詳しい情報は以下のweb記事を参考にしてください。

grep置換を活用する

Vimではgrep検索だけでなく、grep置換をすることもできます。

grep置換をする場合は以下のように2つのコマンドを発行する必要があります。

:args **/*.rb
:argdo %s/tel/phone/gc |update

上の例では次のようなgrep置換を実施します。

  • 拡張子が.rbになっているファイルを対象にする(:args **/*.rb)
  • "tel"を"phone"に置換する(/tel/phone/g)
  • 置換する際に一つずつ確認を入れる(/gcc)
  • 置換が終わったらファイルを保存する(| update)

replace.gif

バッファ・ウインドウ操作系

:lsで現在開いているバッファを確認する

ノーマルモードで:lsとタイプすると現在開いているバッファの一覧が表示されます。
"+"マークの付いているファイルはまだ保存していないファイルです。
先頭に表示されている番号はバッファ番号です。
:b3のようにタイプするとその番号のバッファを表示できます。

ls.gif

ただし、僕はUnite.vimプラグインのバッファ一覧もよく活用します。
Unite.vimを使うと現在開いているバッファの一覧を表示してくれるだけでなく、ファイル名で絞り込んだりカーソルを上下に移動させて目的のファイルを開いたりすることができます。

Unite.vimについてはこちらのweb記事を参考にしてください。

Ctrl-w v/Ctrl-w sでウインドウを分割する

ノーマルモードでCtrl-w vとタイプするとウインドウを縦方向に分割できます。
Ctrl-w sとタイプすると横方向に分割できます。

ウインドウを移動する場合は以下のようなコマンドが使えます。

  • Ctrl-w w: 次のウインドウへ
  • Ctrl-w W: 前のウインドウへ
  • Ctrl-w h: 左へのウインドウへ(j/k/lなら下/上/右へ)

ウインドウを閉じるときは:qとタイプします。

C-w.gif

Vimmerレベル診断

さて、上で紹介したVimコマンドは全部で20種類ありました。
このうち、あなたが普段使いこなしているコマンドはいくつありましたか?

1項目1ポイントとして、自分のVimmerレベルを採点してみましょう!

  1. w/e/b/W/E/Bを使い分けて単語単位に移動する
  2. H/M/Lでカーソルをウインドウ内の上/中/下に移動させる
  3. z<enter>/z./z-で現在のカーソル位置を基準に画面をスクロールさせる
  4. Ctrl-f/Ctrl-b/Ctrl-e/Ctrl-yで画面を上下にスクロールさせる
  5. i/a/s/cw/I/A/S/Cを使い分けて挿入モードに入る
  6. v/c/d/y + f/t/F/T/w/Wの組み合わせを駆使してテキストを編集する
  7. ci'/dat/vi{/ya"のようなコンビネーションを使い分けてテキストを編集する
  8. J/gJで行を連結する
  9. Ctrl-vで矩形選択する
  10. 矩形選択+$+Aで、長さの異なる複数行の行末に同じ文字列を追加する
  11. >>や複数行選択+>でインデントを変える
  12. Ctrl-x/Ctrl-aでカーソルの下にある数字を増減させる
  13. r/Rを使って1文字/複数の文字を上書きする
  14. ~/u/Uで大文字/小文字を切り替える
  15. Ctrl-p/Ctrl-nで単語補完する
  16. 正規表現検索を使いこなす (Perl系と記述が異なるメタ文字を理解する)
  17. grep検索を活用する
  18. grep置換を活用する
  19. :lsで現在開いているバッファを確認する
  20. Ctrl-w v/Ctrl-w sでウインドウを分割する

0ポイント: これからVimmer

Vimを普段使っている人ならさすがに0ポイントということはないはずです。
あなたはきっと、これからVimを使おうと考えている人ですね?
いらっしゃいませ、ようこそVimの世界へ!

1~5ポイント: ひよっこVimmer

Vimでコーディングはしていても、まだまだVimのイロハぐらいの機能しか使いこなしていませんね?
まずはもっと基礎を固めてから、それから応用力を付けていきましょう!

6ポイント~10ポイント: 初級Vimmer

そろそろVimの若葉マークは外れたころですね。
でもまだまだ伸びる余地はあるので、ここで怠けずにもっとコマンドを覚えていきましょう!

11ポイント~19ポイント: 中級Vimmer

このあたりのポイントになるとそれなりにVimの経験がある人だと思います。
とはいえ、Vimにはあなたの作業効率を向上させる機能がまだ隠されているようです。
ネットや書籍で上級者向けのコマンドや機能を学習すればより完璧ですね!

満点(20ポイント): ひょっとして、達人Vimmer!?

すごい!!あなたはたぶん普段からバリバリとVimを使いこなしている 達人Vimmerさんですね?
たぶんVimのスキルは僕なんかよりもずっと上なんだと思います。
「このコマンドもすごく便利なんだけど、ちゃんと使えてる?」という情報があったらコメント等で教えてください!

まとめ

というわけで今回は、個人的に「これはVimならでは」と感じている便利機能を20個集めてみました。

もちろん、Vimの便利機能はこれだけに限りません。
ここで取り上げなかったものもいくつかありますし、僕自身が勉強不足で使いこなせていない便利機能もたくさんあると思います。

誰でもエディタを使いこなせば使いこなすほど、開発の効率はどんどん上がっていきます。
「なんとなく使えてるからまあいいや」ではなく、「もっと効率よく開発できないか?」と自分に問いかけながら、エディタの操作に習熟していきましょう!

あわせて読みたい

脱初心者を目指すVimmerにオススメしたいVimプラグインや.vimrcの設定 - Qiita
こちらは便利なプラグインや.vimrcの設定について紹介したQiita記事です。

僕がサクラエディタからVimに乗り換えるまで - give IT a try
数年前は僕も全くVimが使えず、サクラエディタのような「メモ帳の延長線上にあるテキストエディタ」を使っていました。
そんな僕がVimに乗り換えようと思った動機と、乗り換えるまでにやったトレーニング(?)の数々を公開しています。

Vimコマンドを定期的にツイートするbotも作っています

Vimコマンドの勉強用に作った @be_vimmer_jpというbotがあります。
このbotをフォローすると定期的にVimコマンドの内容をランダムにツイートしてくれます。
よかったらフォローしてみてください。

@be_vimmer_jp
be_vimmer.png

開発の経緯はこちらのブログエントリにまとめてあります。

Vimコマンドを定期的に解説してくれるTwitterボットを作りました - give IT a try


Windowsのvimで挿入モードのIMEをデフォルトオフにする

$
0
0

Windowsで素のvimを起動すると、挿入モードでいきなり全角入力になっていて、動作が直感的でなく躓くことが多々あります。
下記の設定を行うことで、IMEをデフォルトオフにすることができます。

C:\Program Files\Vim\_vimrcに下記を追記

set iminsert=0
set imsearch=-1

iminsertは挿入モードのデフォルト値、imsearchは検索時のデフォルト値です。

0 = オフ
1 = オン

imsearchの-1はiminsertの値を参照するという意味です。

libcallの使い方まとめ

$
0
0

libcall (or libcallnr) は、ダイナミックリンクライブラリの関数を呼び出すことができる。
ここでは以下について述べる。

  1. vim scriptからlibcallで外部ライブラリを呼び出す方法
  2. libcallで呼ぶことのできる外部ライブラリの作成方法

vim scriptからlibcallで外部ライブラリを呼び出す

libcallから呼び出すことのできる外部ライブラリ内の関数シグニチャは、

  • {char*,int} cdecl hoge({char*,int})

でなければならない。
libcallを実際に使う際には、

" char* cdecl some_func(char*)を呼び出す場合" *nix系の場合 => 拡張子まで含めたファイルパスを指定
echo libcall('path/to/shared-object.so','some_func','string to be passed')" windowsの場合 => 拡張子を含めないファイルパスを指定
echo libcall('path/to/dynamic-link-library','some_func','string to be passed')

とする。
libcallの第一引数には外部ライブラリのファイルパスを指定、第二引数には呼び出す関数名を指定する。
第三引数には、文字列か整数を渡す必要がある。

libcallとlibcallnrの使い分けとしては、呼び出す関数の返り値がchar*かintかで分ける。

libcallで呼ぶことのできる外部ライブラリの作成方法

関数宣言時の注意点は以下。

  1. 呼び出し規約はcdeclを使用する
  2. 引数は厳密に1つのみ、以下の型で受け取る
    • char*
    • int
  3. 返り値は以下の型のみ使用できる
    • char*
    • int

返り値としてchar*を使用する場合、vim側でfreeは行われないため、外部ライブラリ側でfreeする必要がある。
また通常のダイナミックリンクライブラリと同様、外部ライブラリ内でデータを保持することができる。

shared objectの場合は、コンパイルオプションに-fPICを指定する必要がある。
dynamic link libraryの場合は、__declspec(dllexport)する必要がある。

RSpec3.0.0をvim-quickrunとvimprocで行指定実行

$
0
0

RSpec3.0.0になってrspecコマンドの-lオプションがなくなりました。
vim-quickrunとvimprocでrspecコマンドを実行しているのですが、オプションがなくなったためRSpecファイルを編集中にカーソルがある行を指定して実行するときにエラーが出るようになりました。

今までの設定は以下のようにしていました。(quickrunの設定部分を抜粋)

.vimrc
"===========================================" quickrun settings"===========================================letg:quickrun_config = {}
letg:quickrun_config._ = {'runner' : 'vimproc',"runner/vimproc/updatetime" : 10}
letg:quickrun_config['ruby.rspec'] = {'command': 'rspec','cmdopt': '-cfd'}

augroup QRunRSpec
  autocmd!autocmdBufWinEnter,BufNewFile *_spec.rb setfiletype=ruby.rspec
augroup END

nnoremap [quickrun] <Nop>
nmap <Space>k [quickrun]
nnoremap<silent> [quickrun]r :call QRunRspecCurrentLine()<CR>fun! QRunRspecCurrentLine()let line = line(".")
  exe ":QuickRun -cmdopt '-cfd -l " . line . "'"endfun

QRunRspecCurrentLine関数でrspecコマンドを行指定で実行しているのですが、上記の設定だとRSpec3.0.0にすると行指定実行したときに以下のようなエラーが出力されます。

invalid option: -l

Please use --help for a listing of valid options

rspecコマンドのヘルプを見ると

  **** Filtering/tags ****

    In addition to the following options for selecting specific files, groups,
    or examples, you can select a single example by appending the line number to
    the filename:

      rspec path/to/a_spec.rb:37

とあるので、ファイル名の後にコロンと行番号をつけてやればよさそうです。

なので、以下のように設定を変更しました。

.vimrc
"================================================================================
" quickrun settings
"================================================================================
let g:quickrun_config = {}
let g:quickrun_config._ = {'runner' : 'vimproc', "runner/vimproc/updatetime" : 10}
let g:quickrun_config['ruby.rspec'] = {'command': 'rspec', 'cmdopt': '-cfd'}

augroup QRunRSpec
  autocmd!
  autocmd BufWinEnter,BufNewFile *_spec.rb set filetype=ruby.rspec
augroup END

nnoremap [quickrun] <Nop>
nmap <Space>k [quickrun]
nnoremap <silent> [quickrun]r :call QRunRspecCurrentLine()<CR>
fun! QRunRspecCurrentLine()
  let line = line(".")
- exe ":QuickRun -cmdopt '-cfd -l " . line . "'"+ exe ":QuickRun -exec '%c %s%o' -cmdopt ':" . line . " -cfd'"
endfun

具体的にはコマンド実行の書式を変更しました。

bundlerを使用している場合は以下のように設定してください。

.vimrc
"===========================
 " quickrun settings
 "===========================
  let g:quickrun_config = {}
  let g:quickrun_config._ = {'runner' : 'vimproc', "runner/vimproc/updatetime" : 10}
- let g:quickrun_config['ruby.rspec'] = {'command': 'rspec', 'cmdopt': '-cfd'}+ let g:quickrun_config['ruby.rspec'] = {'command': 'rspec', 'exec': 'bundle exec %c', 'cmdopt': '-cfd'}

  augroup QRunRSpec
    autocmd!
    autocmd BufWinEnter,BufNewFile *_spec.rb set filetype=ruby.rspec
  augroup END

  nnoremap [quickrun] <Nop>
  nmap <Space>k [quickrun]
  nnoremap <silent> [quickrun]r :call QRunRspecCurrentLine()<CR>
  fun! QRunRspecCurrentLine()
    let line = line(".")
- exe ":QuickRun -cmdopt '-cfd -l " . line . "'"+ exe ":QuickRun -exec 'bundle exec %c %s%o' -cmdopt ':" . line . " -cfd'"
endfun

詳しくはヘルプをご覧ください。
:h quickrun-option-exec

これでRSpec3でもファイルを編集中に行指定のテスト実行ができるようになります。

Mac OS X で UNIX 環境と最高の使い心地を整える

$
0
0

ターミナル操作編✋

Homebrew のインストール

    $ ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"
    $ brew update

参考文献

Git のインストール

環境設定ファイルなどはすべて GitHubで管理しているため、このコマンドがないと始まらない。すでに Homebrew が入っているので、

    $ brew install git

インストールが完了したら、

    $ cd; git clone https://github.com/b4b4r07/dotfiles

を実行する。完了したら、

    $ cd dotfiles
    $ ./install.sh

ここまでエラーなく正常に終了したら、一旦 bash を再起動する(./install.shによって所定の場所にリンクされたファイルを読み込みたいだけ)。

Vim のインストール

Vimmer なので。

    $ brew install vim

クリップボードとの連携ができたほうがいいので、brewでインストールした vimが対応しているかどうか確認する。

    $ brew list vim | grep "vim$"
    /usr/local/Cellar/vim/7.4.161/bin/vim
    $ /usr/local/Cellar/vim/7.4.161/bin/vim --version | grep "clipboard"
    +clipboard       +iconv           +path_extra      -toolbar
    +eval            +mouse_dec       +startuptime     -xterm_clipboard

対応していたら、既存の vimをこれと置き換える。

    $ sudo mv /usr/bin/vim{,.old} && ln -s /usr/local/Cellar/vim/7.4.161/bin/vim /usr/bin

参考文献

すでに設定ファイル(~/.vimrc)の配置は完了しているので、ここで一旦 vimを起動しておく。渡すパラメータは以下

    $ vim +NeoBundleInit

設定ファイルに初回起動のみ NeoBundleInit関数が有効に使用できるような設定になっている。終わったら NeoBundleInstallなどで、記載されたプラグインを一括インストールする。仮にインストールできないようなこと(NeoBundleInstallしてもインストールされないなど)があったならば、いったん今の vimを終了してもう一度起動したら、NeoBundleCheckが自動実行される(これもそうなるように設定ファイルに記述してある)ので、これでインストールされてないプラグインがあったら自動で検知され、インストールされる。

各種必要コマンドのインストール

すべて brewからインストールできます。また、インストールされたパッケージの確認は

    $ brew list

でいいです。以下にインストールする予定のコマンド郡を列挙する(大体五十音順)。

colordiff

diffの出力に色を付ける。diffにエイリアスしておくと、diffしたときに色がつく。

cowsay

後述する fortunefigletも同様の理由ですが、コマンドラインにイラストをに使用するためにインストール。

figlet

cowsayに同じ。

fortune

cowsayに同じ。

gist, gisty

gist をコマンドラインから操作できるコマンドです。後者のほうが少し高機能とされています。post したあとに環境変数 GISTY_DIRで指定したディレクトリに自動 cloneしてくれたりします。しかし、高機能ゆえに初期設定が少し面倒なため簡易利用にしか使用しない場合などは前者でいいです。

参考文献

最近では前者も高機能化されているようで、

    $ gist --login

などで、OAuth 認証でアカウントの紐付けも出来るようです。やはり、~/.gitconfigなどにパスワードを平文で載せるのは抵抗があるため(そもそも GitHub 管理しているなら不可)、この方法でログインできるのは大変便利です。

hub

gitと GitHub を少し便利にするコマンド。

参考文献

pwgen

覚えやすいパスを生成するパスワードジェネレータ。第一引数に数字を渡すことでその長さでパスワードをつくる。デフォルトは8文字。第二引数に数字を渡すことでその個数分ランダムに色々生成するのでその中から良さそうな好きなモノを選べば良い。デフォルトはたくさん。

オプション
-B1 と l のような紛らわしい文字を使わない
-s全くのランダムな文字列を生成する
-y記号を含める

tig

コマンドラインから使用することのできる git ブラウザです。参考文献にとても詳しい説明が記載されているので省略。

参考文献

tree

ディレクトリツリーを作成する

wget

OS X には標準でインストールされていない(たしか)ので。

zsh

普段は bash ユーザではあるが、ユーザの多いシェルかつ最新のシェルということで動向だけは追っているため。

Bash を整える

basher なので。

bash-completion

これをインストールすることで補完が強いと言われる zsh並みの補完機能を手にすることができる(らしい)。

    $ brew install bash-completion

ソースコードからインストールするもよし。最後に必要設定を書き込む(すでに dotfilesに記述してあるので必要がないのだが一般ユーザの目線で)。

$ cat <<EOF >>~/.bash_profile
if [ -f $(brew --prefix)/etc/bash_completion ]; then
    . $(brew --prefix)/etc/bash_completion
fi
EOF

参考文献

favdir

ディレクトリ移動が楽になる。よく利用するディレクトリや、やむなく深い階層にあるディレクトリを登録すればいい。

参考文献

cdhist

ディレクトリの移動履歴から上位10件をリングバッファ的にアクセスしやすくする。また、移動履歴からよく利用されるもののエイリアスを作成したり、前にいたディレクトリにすぐ戻れるようにしたり、移動をパスの頭文字で行えるようにするプラグイン。「移動」にまつわる。

shc

シェルスクリプトのバイナリ化を行う。

参考文献

OS X 設定操作編✋

タップでクリック

システム環境設定から変更。

ホームディレクトリを英語化する

バージョンによって方法が少し違うのですが、ターミナルからこれで一発。

lang_setting.sh
$ cat lang_setting.sh
if[$(echo"`sw_vers -productVersion |cut -d. -f1 -f2` > 10.8"| bc) -eq 1];thencd /System/Library/CoreServices/SystemFolderLocalizations/ja.lproj
elsecd /System/Library/CoreServices/SystemFolderLocalizations/Japanese.lproj
fi
sudo mv SystemFolderLocalizations.strings SystemFolderLocalizations.strings.back
sudo cp ../en.lproj/SystemFolderLocalizations.strings .
killall Finder
$ chmod 755 ./lang_setting.sh && ./lang_setting.sh

defaults コマンドで隠し設定を有効化

必要アプリのインストール

  1. Dropbox

    重要!ファイルクラウドサービス。特にターミナルなどからの利用がすごく楽なので完全必須アプリ

  2. GoogleChrome

    ブラウザ

  3. BetterTouchTool

    重要!トラックパッドユーザは必須アプリ。ここに設定ファイルがあるのでダウンロードして、アプリからインポートする。

    参考文献

  4. Growl

    App Storeからも。

    通知センター的なもの。標準の通知センターが機能拡張してきているので後々は削除するかもしれない。

  5. Justnotes

    プレーンテキストで保存できるクラウドメモサービス Simplenote のクライアントソフト。Evernote と違って非常に軽量で同期もシームレスでかつプレーンテキストで保存できるので重宝。クライアントソフトの中ではこれが一番使いやすかった。

  6. Memory Clean

    メモリ解放アプリ。Mavericks になってから OS 単位でメモリがどうこういっているがステータスバーに使用率がリアルタイムに出たりする点で気に入っている。

  7. PopClip

    App Storeからも。

    重要!iOS のようにコピペを行えるようにする。以外にもとても便利でエクステンションを追加することで、辞書検索やツイートしたりあとで読む系のサービスに投げたり、一度使うとインストールされてないマシンでは苦行を強いられる。中毒性の高い便利アプリ

    参考文献

  8. Evernote

    クラウドメモサービス。動機が遅いのとクライアントソフトが重いのを除けばまあ使える(結構重要な点だけど)。昔から使っているから手放せないというのもあって消せない。主にライフログ(Twieveで記録など)としての使用と、あとで読むに投げない記事などの墓場として利用。

  9. MacVim

    GUI ベースで使用できる Vim。UI が綺麗だが、結局ははやさの点からコンソール起動するのでそこまでの重要さはない。

  10. 1Password

    パスワードマネージャ。高価だが使っていて気持ちいいアプリ。Alfred2 の PowerPack などと連携するととてもいい。各種ブラウザにエクステンションがあるのもいい。複数間プラットフォームでの同期は iCloud か Dropbox で選ぶことができる。

  11. Alfred2

    重要!ランチャ。Spotlight の強化版。PowerPack があるととてもよい。

    参考文献

    PowerPack があるなら以下も。
    - Alfred 2のユーザ体験をロケットスタートで始めるための13の偉大なWorkflow
    - Alfred PowerPack を導入してみた

  12. Skitch

    スクリーンキャプチャに利用。Evernote アカウントがあるとなお良い。簡単なお絵かき操作もできる。

  13. VLC

    動画などの再生ソフト

  14. Vox

    軽量な音楽再生ソフト。FLAC が再生できる点が良い。また iTunes の音楽ライブラリをスキャンして再生できる。

  15. Mou

    リアルタイムでプレビューできる2画面型のマークダウンエディタ

  16. XtraFinder

    Finder 拡張アプリ。OS レベルでタブなどをサポートしていなかったときからタブに出来たので使用してた。Chrome タイプのタブにできる点と、Finder を2画面表示してコピー等をしやすくする点で高評価

    参考文献

  17. The Unarchiver

    解凍ソフト

  18. Google 日本語入力

    ことえりはいやなので

  19. Tweetbot

    iCloud でタイムラインの既読位置を同期できる。また UI がきれいなので利用

  20. KeyRemap4MacBook

    Mac Mini では HHKB を使用しているので問題ないが、MBA の US 配列では Aキーの横が CapsLock になっているため、Control キーに変更する目的のみでインストールした。設定さえすれば高度なリマップや Windows でいうとことの AutoHotkey のようなことができる模様。

  21. AppCleaner

    いらないアプリを削除する。関係ファイルも一切合切削除してくれる

  22. Pocket

    あとで読む系のクライアントソフト。PopClip からなげるときに必要なので

  23. Kobito

    Qiita に投稿するときに利用する。Mou と同じ2画面型のリアルタイムプレビューできるが、タグ入力が必須(そもそも投稿が目的とされているので)なので、非常に優秀なマークダウンエディタだけど Qiita 専用。Qiita に投稿しないマークダウンファイルを書くときは Mou。投稿するときは Kobito で使い分け。

  24. Burn

    ライティングソフト

  25. Keynote

    プレゼンソフト。パワポよりアニメーションが強い。

  26. File Details

    Sha1 や MD5 やその他事細かなファイル情報を教えてくれる。使い方も簡単。

  27. ClipMenu

    App Storeからも。

    クリップボード履歴拡張ソフト

U.S.キーボードの削除

ここをみて設定。

最後に

環境構築した時に書いていないので思いだけるだけ今書き出しました。思い出し次第加筆します。

カーソル位置の属性を取得する

$
0
0

コメント内かどうかとか

see :h synID():h match-parens

echo synIDattr(synID(line("."),col("."),1),"name")

Vimがちょっと便利になる5つ起動オプション(おまけあり)

$
0
0

もしかしたらあなたの役に立つかもな5つの起動オプション

Vimには起動オプションにも様々なものがあります。

詳しくはhelpを見れば書いてありますが、
私がたまに使ったりするものをいくつか簡単にご紹介します。

1.行番号を指定して開く 「+{num}」

test.rb の45行目を指定して開く場合

vim +45 test.rb

+45はファイル名の後でもよいです

また、+-cでもよいです。(以降全て)

2.ファイルを開いたときにコマンドを実行する 「-c」

NERDTreeFindを実行したい場合

vim test.rb -c NERDTreeFind

コマンドにスペースを含むときは "(ダブルクォート)で囲みます

また、これを利用して、ファイルを開いた時に検索もできます。
test.rb の 'test' という文字を検索したい場合は以下です。

vim test.rb -c /test

-cで与えたコマンドは指定したファイルが読み込まれたあとに実行されますが、
vimrcを処理する前に実行したいときは --cmdを用いることもできます。

viでも利用できるが、viは1つのコマンドしか実行できません。
※vim は 10個までできます

3.読み込み専用で開く「-R」

test.rb を ReadOnlyモードで開く

vim -R test.rb

4.複数のファイルをタブで分割して開く「-p」

test.rb と hoge.rb をそれぞれ異なるタブで開く

vim -p test.rb hoge.rb

ちなみに -oオプションで与えられたファイルを水平分割、-Oオプションで垂直分割して開くことができます。

5.vimrcやプラグインを無効にして開く「-u」

人の環境で設定が分けわかんないことになってるときとかに、たまに使います。

vim -u NONE test.rb

おまけ: よく使わないけどたまに遊んでる機能

操作の保存と再現「-w, -s」

操作の保存(vimop.vim に保存する場合)

vim -w vimop.vim test.rb

操作の再現(vimop.txtに保存する場合)

vim -s vimop.vim moge.rb

同じ操作がmoge.rbで再現されます。
※ファイルを閉じるところまで

まとめ

知らなくても全然Vimは便利に使えますが、個人的にたまに「便利!」って思ってるものを5つ上げてみました。
Vimにはもちろんプラグインとかも色々入れたりしますが、テキストオブジェクトとか基本機能だけでも色々と便利に使えますよね!
Vimを色々使っていきましょう!

vimで開いているファイルのディレクトリに移動する

$
0
0

自動的に移動する

autochdirより、コンパイル時に有効にされた場合のみ使用できます。
:echo exists("+autochdir")の結果が0なら残念ながら使う事ができません。

:setautochdir

コマンドで指定して移動する

Exコマンド用の特別な文字より、%はカレントファイル名、:hはファイル名のヘッド (末尾の部分と全ての区切りが除かれたもの)なので、%:hは開いているファイルのディレクトリに展開されます。

" グローバルなカレントディレクトリを変更する:cd %:h

:cdはグローバルなカレントディレクトリを変更するので他のウインドウやバッファも変更されます。

" ローカルなカレントディレクトリを変更する:lcd %:h

カレントウインドウのカレントディレクトリだけを変更したい場合は:lcdを使います。

現在のディレクトリを確認する

:pwd

VimでWorkflowyっぽいアウトラインプロセッサ

$
0
0

はじめに

Web等を見回してみると、様々なアウトラインプロセッサがあります。
その中で私が使用しているのは、
Workflowyと呼ばれるサービスです。

公式サイト
https://workflowy.com/

様々なブログ等でも紹介され、
認知度も上がってきているのかなという印象です。
詳しい使い方などはここでは割愛しますが(ググれば紹介しているブログ等がたくさんヒットします)

さて、このWorkflowy、Vim上でも使えないかなと探してみましたら、
なんかそれっぽいものを発見しましたので、導入してみました。
実際にはWorkflowyの仕様をVim上で再現する挙動となっていますので、
同期機能などはありません。
ただし、後述の通りWorkflowyからインポートすることはできます。

導入

そのプラグイン名は、Workflowishです。

https://github.com/lukaszkorecki/workflowish

導入には、NeoBundleを用いました。

.vimrc
NeoBundle 'lukaszkorecki/workflowish'

他、特に設定などはしていません。

使い方

(Readmeを読んでもらえば確実だと思いますが一応説明を)

ファイルの拡張子は.woflとします。
もしくはファイルタイプをworkflowishに変更 → :set ft=workflowish

  • 項目の先頭に*を付ける
  • 完了の項目は-を付ける
  • ノートは先頭に\を付ける

項目の折りたたみ等は、za等のVim標準のコマンドを使用するようです。

001.gif

このプラグイン独自のコマンドは以下です。

zq選択中の項目にフォーカス(トグル)
zp現在フォーカスしている項目から一つ上の階層に移動

002.gif

本家Workflowyからのインポート

Workflowyと同期する機能はありませんが、
インポート機能が搭載されています。

  1. Workflowy上にて、プレーンテキスト形式でエクスポート
  2. Vim上で新規ファイルを生成し、1の内容をコピペしたのち、以下のコマンドを実行

:call workflowish#convert_from_workflowy()

あとがき

またまだ使い始めたばっかりですが
私の場合は、まずWorkflowyで書いて、
ある程度固まったらWorkflowishにバックアップ目的でエクスポート。
と言った感じで運用しています。

後、たまに折りたたみの挙動がおかしくなる?ことがあるようです。
その時は再度開き直せば大丈夫なようですが、
あくまで本家のサブ的な使い方が無難かなと思います。

vimでヴィジュアルモードの連続貼り付け

$
0
0

悩み

ヴィジュアルモード(visual mode)で単語を選択→yでコピー(copy)→適当な場所へ移動→ビジュアルモードで選択→pで置換貼り付け
とやると、最初の一回は意図したとおりに貼り付けれるが、2回目以降は、直前に置換した元の単語が貼り付けられてしまう。

多分、ビジュアルモードで貼り付ける際に、d→i→pみたいに途中でレジスタに入りコピーされてしまうのではないかと思われる。不便だ。

解決


.vimrc
function! Put_text_without_override_register()
let line_len = strlen(getline('.'))
execute "normal! `>"
let col_loc = col('.')
execute 'normal! gv"_x'
if line_len == col_loc
execute 'normal! p'
else
execute 'normal! P'
endif
endfunction
xnoremap <silent> p :call Put_text_without_override_register()<CR>

これを.vimrcに追記すれば解決

確かに解決はしたんだけど、こんな大仰なことしないでも、貼付け時のレジスタを変更すればいいだけだった。
というわけで以下でOKでした。

.vimrc
vnoremap <silent> p "0p

ちなみに

vimのコピーをOSのクリップボードと一緒にする設定で

.vimrc
set clipboard=unnamed,autoselect

というのをよく見かけるが、これをやると前述のヴィジュアルモードを使った置換貼付けができなくなる

.vimrc
set clipboard=unnamed

とするとうまくいく。

組み合わせると、両立できる!!

参考

vimからdbにアクセスするためのplugin作りました

$
0
0

https://github.com/kamichidu/vim-vdbc

postgresに対して、psql経由かlibpq経由かを選べます。
現状は、postgresのみに対応。
特定のdbに依存しない作りになってるはずなので、driverというモジュールを追加することによって、対応dbを増やせます。

postgresとsqliteは個人的に使ってるため、そのうち対応します。
mysqlや他のdbについては、patches wellcomeなスタンスです。

指定行をコピーして貼り付ける

$
0
0

指定行をコピーして貼り付ける
:7t.

これだと7行目を下の行にコピーする。

unite.vimでUnknown function

$
0
0

macでは普通に動いていたuniteが、何故かcentosで以下のようなエラーをはいた

エラー内容
Error detected while processing function <SNR>28_call_unite_empty..unite#start..unite#start#standard..unite#view#_init_cursor..unite#view#_set_cursor_line..unite#view#_match_line:
line    2:
E117: Unknown function: matchaddpos
E15: Invalid expression: has('patch7.4.340') ? matchaddpos(a:highlight, [a:line], 10, a:id) : matchadd(a:highlight, '^\%'.a:line.'l.*', 10, a:id)

vimのバージョンは7.2

vimバージョン
[vagrant@vagrant-centos65 ~]$ vim --version
VIM - Vi IMproved 7.2 (2008 Aug 9, compiled Apr  5 2012 10:17:30)

該当箇所のソースはエラーメッセージに有る通り。

該当箇所
function! unite#view#_match_line(highlight, line, id) "{{{
  return has('patch7.4.340') ?
        \ matchaddpos(a:highlight, [a:line], 10, a:id) :
        \ matchadd(a:highlight, '^\%'.a:line.'l.*', 10, a:id)
endfunction"}}}

何故かは分からないが、has('patch7.4.340')がtrueになっているらしい。
それでmatchaddposを使おうとしたけど見つからなくてエラーという感じだろうか。

helpを見た所、patchチェックはバージョンチェックも一緒にやったほうがいいらしい。

Help
3.  Included patches.  First check |v:version| for the version of Vim.
    Then the "patch123" feature means that patch 123 has been included for
    this version.  Example (checking version 6.2.148 or later): >
        :if v:version > 602 || v:version == 602 && has("patch148")

というわけで、以下の用に書き直したらエラーが消えました。

該当箇所
function! unite#view#_match_line(highlight, line, id) "{{{
  return (v:version >= 704 &&  has('patch7.4.340')) ?
        \ matchaddpos(a:highlight, [a:line], 10, a:id) :
        \ matchadd(a:highlight, '^\%'.a:line.'l.*', 10, a:id)
endfunction"}}}

パッチを当てて動作確認してないので、これで正しいかは分かりませんが、とりあえず動いたので満足です。

sudo.vim

$
0
0

unite.vim を使っていて Vim を普通に sudo して使おうとすると以下の様な警告が出る:

$ sudo vim  # エラーになる
unite.vim disabled:
    "sudo vim" is detected and $HOME is set to your user's home.
    You may want to use the sudo.vim plugin,
    the "-H" option with "sudo" or set always_set_home in /etc/sudoers instead.

$ sudo -H vim  # エラーにならないが見に行く .vimrc が /root/.vimrc になってしまう

unite.vim は無効化された: "sudo vim" が検出され、$HOME が貴方のホームディレクトリに設定されている。 「sudo.vim」プラグインを使うか、「-H」オプションを sudo と共に使うか、/etc/sudoers に always_set_home を設定するのが良い。

このように警告を出している理由も tweet されていたので参考に貼っておく。

ただ、これに従い sudo -H とすると .vimrc が root のものになってしまうので良くない。しかも -H 付けるのとか忘れそうだ。 ということで sudo.vim というプラグインを導入してみる。これを使うと自分の .vimrc を使いつつ root 権限で読み書きできる。

NeoBundle を使用して導入

NeoBundle 導入済とする。例によって .vimrc に以下を書けば O.K. NeoBundle すばらしい。

NeoBundle 'sudo.vim'

使い方

$ vi sudo:xxx.txt  # sudo vi xxx.txt の代わりにこう書く
:w sudo:%  " vi xxx.txt で開いた後に xxx.txt が root 権限必要な場合に root で上書き保存:w sudo:yyy.txt  " root で別名保存:e sudo:%  " 開いた後に root で開き直す場合

自動的にインデントするVimプラグイン作った

$
0
0

airindent.vim

airindent.vim

このプラグインは、ファイルを編集し始めた時と編集を終了した時に自動的にインデントを形成するコマンドを実行します。

私の場合、インデントを気にすることがあまりに少なすぎるので、最低限の措置として作りました。

install

~/.vimrc
NeoBundle 'syui/airindent.vim'

$ vim +NeoBundleInstall

または、

$ curl -o ~/.vim/plugin/airindent.vim https://raw.githubusercontent.com/syui/airindent.vim/master/plugin/airindent.vim

setting

~/.vimrc
" airindent.vim {{{" すべての範囲の自動インデントを有効にするletg:auto_indent_all =1" 現在行の上の部分だけ自動インデントを有効にするletg:auto_indent_up =0" gg=G,line(".") . G
nmap <Leader>-<Plug>(IndentMoveLine)" }}}

注意点

更新情報はブログの方になると思います。

http://syui.github.io/blog/2014/06/19/airindent-dot-vim/


調子に乗ってvimを使い始めた

$
0
0

変態キーバインドってのを教えてもらって、セミコロンをエンターにしてしまってから7年ほど経つけれど、その時以来の不便を感じながら使ってるw

VimがいいとかEmacsがいいとか、、、そういうレベルでコードを書いているプログラマではないので、正直どっちもいらないなーって思ってた。

・マウスを使うとキーボードから手を離して効率が下がるっていうんで、変態キーバインドを導入。具体的にはセミコロンをエンターに変えて(セミコロンはctrl+セミコロンで打てます)BSはctrl+U、delはctrl+コロン、ctrl+hjklでカーソル移動
・ThumnbSence入れてトラックパッド触ってる時だけ、Fが左クリック、Dが右クリックになって、s押してるとスクロール、さらにトラックパッドを親指で操作できるように練習

とかホームポジションから手を移動しないように色々やってきたけど、脱初心者を目指すなら知っておきたい便利なVimコマンド25選 (Vimmerレベル診断付き)を見て使ってみようかなと。

現在の自分のVimmerレベルは0ですね。i/a で編集モード、escでモード切り替え、xで削除、ddで行削除、rで上書き、hjklでカーソル移動くらいしかできません。コピペもよくわからないくらいのレベルです。

vimインストール

.Brewfile
install vim
cask install macvim

今はeclipseでjavaの開発をやっているんだった。

Eclipse
Vrapperってプラグイン
更新サイト
http://vrapper.sourceforge.net/update-site/stable

紹介記事
http://yuroyoro.hatenablog.com/entry/20100218/1266477264

Vrapper
optional Java Extensionも入れてみる

使ってみる

そんなに一気に覚えられないので、ちょっとづつ覚えていこうと思います。
その都度更新していこうかな。

w/e/b/W/E/B/ge/gEの移動系のを使ってみる

確かにマウスで移動するよりも良さそう。
まだ頭で考えながらやってるのでしばらくこれだけを意識して使ってみることにします。
これだけだと、不便なだけのエディタ。だけどだんだん使えるようになってくると信じてる。

Vim のスペルチェックで特定のキーワードを一時的に例外と見なす

空行の削除

$
0
0

空白行を消したいとき、vimなら一瞬で削除できます。

手順1

一回でするなら:v/\S/dです。

手順2

最初に末尾までの空白を削除:%s/\s*$している場合は:v/./dです。

修正前

a
{空白行}
b
{空白行}
c
{空白行}
d

修正後

a
b
c
d

vimで:Sex

$
0
0

コマンドモードで

:Sex

ファイルエクスプローラが出現する

Vim起動時に複数のファイルを開く

$
0
0

一度ぐらいは投稿したかったので試しに
何番煎じだよ!なんていわないで...

複数ファイルを起動

#vim file1 file2 ...

vimの後にファイル名をつなげるだけです。
Linuxなどを使用しているなら

#vim `find ./ -name "*.html"`

などすると編集したいファイルを一気に開けちゃったりします
すごく...便利です...

ファイルの移動

コマンドラインモード時に

 :n

で次ファイルへと遷移します。

 :N

で前ファイルへと遷移します。

起動ファイルの確認

コマンドラインモード時に

:file

とすることで開いているファイルの一覧が表示されます。

Viewing all 5770 articles
Browse latest View live
<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>