Ads by Google

--.--.--.--:--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

VIMのコマンド

2009.01.21.13:12


 いたってフツーなVIMのよく使うコマンドリファレンス


★よく使うコマンドリファレンス
<通常モード>
 kjhl      上下左右移動
 w        一語右へジャンプ
 b        一語左へジャンプ
 0        行の先頭へジャンプ
 $        行の末尾へジャンプ
 <CTRL-D>   半ページダウン 
 <CTRL-U>   半ページアップ
 H        画面の一番上の行へジャンプ
 M        画面の中央の行へジャンプ
 L        画面の一番下の行へジャンプ
 gg       ファイルの先頭行へジャンプ
 G        ファイルの末尾行へジャンプ
 V        選択の開始
 <ESC>     <通常モード>へ戻る
 yy       カーソルのある行をヤンク(コピー)
 p        ヤンク(コピー)したものをペースト
 dd       カーソルのある行を削除
 f<任意の文字> その行の文字検索(右方向)
 F<任意の文字> その行の文字検索(左方向)


★よく使うコマンドリファレンスその2
:e ファイル名  ファイルオープン
:w        ファイル保存
:w ファイル名  ファイル名を指定して保存
:sp       画面横2分割
:vs       画面縦2分割
:e .       ファイラーを開く
:sp .      ファイラーを分割画面で開く
:vs .      ファイラーを縦割分割画面で開く
<CTRL-W>w   分割画面移動
<CTRL-W>o   他の分割画面を閉じる
:q        ファイルを閉じる(分割画面を閉じる)
q:        :コマンドの履歴(履歴を選択し実行可能)
m<任意の英字> マーク
'<任意の英字> マークした所へジャンプ
:m'<任意の英字> 選択した文字をマークした所へ移動
:!<コマンド>  コマンドを実行する
<CTRL-[>    <ESC>と同じ、<ESC>が押しづらいときこっちを使う


theme : テキストエディタ
genre : コンピュータ

手より頭を動かす

2009.01.20.15:53


★手を動かすより頭を動かせ
 VIMで大切なのは、手を動かすことじゃない。動かす前に考えること。そりゃあ、手がすばやいに越したことはないけど、それじゃあいつまでも上達しない。

 以下のプログラムのfor文の行にタブを一個入れるのと、99,199,299,399,499をそれぞれ1ずつ足して100,200,300,400,500にしたい。
 さて、どうする。

int main()
{
  int i;
for (i = 0 ; i < 99 ; i++ ){
    //@1
    printf("%c\n",i);
  }
for (i = 0 ; i < 199 ; i++ ){
    //@2
    printf("%d\n",i);
  }
for (i = 0 ; i < 299 ; i++ ){
    //@3
    printf("%x\n",i);
  }
for (i = 0 ; i < 399 ; i++ ){
    //@4
    printf("%X\n",i);
  }
for (i = 0 ; i < 499 ; i++ ){
    //@5
    printf("%04X\n",i);
  }
}

★上を下のようにしたい
int main()
{
  int i;
  for (i = 0 ; i < 100 ; i++ ){
    //@1
    printf("%c\n",i);
  }
  for (i = 0 ; i < 200 ; i++ ){
    //@2
    printf("%d\n",i);
  }
  for (i = 0 ; i < 300 ; i++ ){
    //@3
    printf("%x\n",i);
  }
  for (i = 0 ; i < 400 ; i++ ){
    //@4
    printf("%X\n",i);
  }
  for (i = 0 ; i < 500 ; i++ ){
    //@5
    printf("%04X\n",i);
  }
}

★答え
:g/for/norm >>f9<CTRL-V><CTRL-A>

★解説
 for文がある行を処理するってことで、:g/for/
 それからすぐnormコマンド実行して>>f9<CTRL-V><CTRL-A>をやってるね。
 f9はf<でもいい。まあ打ちやすいのは9かな。
 <CTRL-V>は、コントロールコードを入力するための準備って考えて。


theme : テキストエディタ
genre : コンピュータ

VIMでテキスト整形

2009.01.20.10:02


★高度なテキスト整形
 本格的に整形するなら、Perlかなんかでやってしまえばすむんだけど、今回の問題程度であれば、VIMエディタ上でちょちょいってやれちゃう。
 以下のテキストは16進数を16個ずつ横に並べたかったけど、なぜか後ろの二バイトが前の行にいっちゃったってもの。これをきれいに並べたい。カーソルは27の2の上としよう。


0e 0f
00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d
-----------------------------------------------
1e 1f
10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d
2e 2f
20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d
3e 3f
30 31 32 33 34 35 36 37 38 39 3a 3b 3c 3d
-----------------------------------------------
4e 4f
40 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d
5e 5f
50 51 52 53 54 55 56 57 58 59 5a 5b 5c 5d
6e 6f
60 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d
-----------------------------------------------
7e 7f
70 71 72 73 74 75 76 77 78 79 7a 7b 7c 7d
8e 8f
80 81 82 83 84 85 86 87 88 89 8a 8b 8c 8d
9e 9f
90 91 92 93 94 95 96 97 98 99 9a 9b 9c 9d
-----------------------------------------------
ae af
a0 a1 a2 a3 a4 a5 a6 a7 a8 a9 aa ab ac ad
be bf
b0 b1 b2 b3 b4 b5 b6 b7 b8 b9 ba bb bc bd
ce cf
c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 ca cb cc cd
-----------------------------------------------
de df
d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 da db dc dd
ee ef
e0 e1 e2 e3 e4 e5 e6 e7 e8 e9 ea eb ec ed
fe ff
f0 f1 f2 f3 f4 f5 f6 f7 f8 f9 fa fb fc fd

★上を下のように並べたい。さあ、どうする?

00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f
-----------------------------------------------
10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f
20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f
30 31 32 33 34 35 36 37 38 39 3a 3b 3c 3d 3e 3f
-----------------------------------------------
40 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f
50 51 52 53 54 55 56 57 58 59 5a 5b 5c 5d 5e 5f
60 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f
-----------------------------------------------
70 71 72 73 74 75 76 77 78 79 7a 7b 7c 7d 7e 7f
80 81 82 83 84 85 86 87 88 89 8a 8b 8c 8d 8e 8f
90 91 92 93 94 95 96 97 98 99 9a 9b 9c 9d 9e 9f
-----------------------------------------------
a0 a1 a2 a3 a4 a5 a6 a7 a8 a9 aa ab ac ad ae af
b0 b1 b2 b3 b4 b5 b6 b7 b8 b9 ba bb bc bd be bf
c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 ca cb cc cd ce cf
-----------------------------------------------
d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 da db dc dd de df
e0 e1 e2 e3 e4 e5 e6 e7 e8 e9 ea eb ec ed ee ef
f0 f1 f2 f3 f4 f5 f6 f7 f8 f9 fa fb fc fd fe ff


★答え
vip:g/0 /norm kddpkJ

★解説
 まずvipでまとまり選択。
 :g/0 /で、それぞれの先頭の文字列を探す。
 normは、この問題のツボ。通常モードを実行するコマンド。この記述の後は、通常モードとして記述された文字をコマンドとして実行する。
 つまり、kddpkJが行われるってわけ。
 kはカーソルを上に移動、ddpで一行入れ替え
 kでカーソルを上に移動して、Jで次の行と連結。

theme : テキストエディタ
genre : コンピュータ

VIM実用的な編集

2009.01.19.15:20


★実用編集
 VIMで神業選択やら移動やらできたって、編集がちゃんとできなければ意味がない。じゃあちょっと実際に使えそうな編集をやってみよう。


★問題 以下のif文を、(カーソルはHEREのHの位置)

volatile int aa;

int main()
{

  if( aa == 0 ){
    printf("***************\n");
    printf("\n");
    printf(" aa is 0\n");    // HERE
    printf("\n");
    printf("***************\n");
  }

}


★このようにしたい

volatile int aa;

int main()
{

  if( aa == 0 ){
    printf("***************\n");
    printf("\n");
    printf(" aa is 0\n");    // HERE
    printf("\n");
    printf("***************\n");
  }else{
    printf("***************\n");
    printf("\n");
    printf(" aa is 1\n");    // HERE
    printf("\n");
    printf("***************\n");
  }

}

★答え

ya}gP
ielse<ESC>
/0<CR>r1

★解説
 まず、if文の{から}までをコピーすることを考える。そうすると最初にya}は思い浮かぶだろう。そうya}を実行すると都合の良いことにif文の{の上にカーソルが移動するのだ。おいおい効率的な移動の記事を書くときに紹介するが、移動方法は移動コマンドだけではないのだ。まあ、それはおいといて、と。ya}Pとすると問題の文字列は以下のようになる。

volatile int aa;

int main()
{

  if( aa == 0 ){
    printf("***************\n");
    printf("\n");
    printf(" aa is 0\n");    // HERE
    printf("\n");
    printf("***************\n");
  }{
    printf("***************\n");
    printf("\n");
    printf(" aa is 0\n");    // HERE
    printf("\n");
    printf("***************\n");
  }

}

 ただし、この時カーソルの位置は、if文の行の{の上にあるのだ。これは、Pコマンドの性質によるものだ。ペーストしたものの先頭にカーソルが残る仕組みになっている。じゃあelse文を入力するために、}{の行にジャンプしなければならない。コマンドとしては%が楽だ。%コマンドは、対応するかっこにジャンプするコマンドだ。
 だけどぼくは、なるべく%コマンドは使いたくないんだ。だってシフトキー押しながら数字の5(%のキー)って疲れるもん。
 そんな時に、P実行後にカーソルの位置を変える方法がある。gPだ。これはペースト後、貼り付けたものの最後にカーソルをもっていくコマンドだ。
 つまり、
ya}gP
 とだけすれば、{から}までをコピーして、}{にelseを挿入する準備ができるってわけ。

 あとは簡単。iコマンドでelseを挿入し、/0で文字を検索して、rコマンドで1に入れ替えるだけ。

theme : テキストエディタ
genre : コンピュータ

VIMの行入れ替え

2009.01.19.14:29


★行入れ替え
 一番有名なのがカーソル行とその下の行を入れ替える、一行入れ替えのddp。
 でも技はそれだけじゃない。
 下の1--2--の行と、3--4--の行を入れ替え、つまり2行ずつを入れ替える方法は?
 カーソルは1--の行にあるものとする。

1------------------
2------------------
3------------------
4------------------
5------------------
6------------------

★答え
djjp

★結果
3------------------
4------------------
1------------------
2------------------
5------------------
6------------------


★解説
 djで1--と2--の行を消し、それがヤンクされる。
 jで一行下に移動しpで4--と5--の間にヤンクした1--2--を貼り付け。



★問題
 下のA1〜A6とB1〜B6を入れ替えよ。カーソルはHEREの位置。

A1------------------
A2------------------
A3------------------
A4--------HERE------
A5------------------
A6------------------

B1------------------
B2------------------
B3------------------
B4------------------
B5------------------
B6------------------

C1------------------
C2------------------
C3------------------
C4------------------
C5------------------
C6------------------



★答え
dapvap<ESC>p
または
dapvapvvp

★解説
dapでA1〜A6のかたまりを削除。この時ヤンクされる。
vap<ESC>でB6の下行に移動。
pでヤンクしたものを貼り付け。 もう片方のdapvapvvpのvvの意味は<ESC>と同じ。(Visualモードをキャンセルするため)

theme : テキストエディタ
genre : コンピュータ

プロフィール

Author:vimmer
FC2ブログへようこそ!

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
Powered By FC2ブログ

今すぐブログを作ろう!

Powered By FC2ブログ

ブロとも申請フォーム

この人とブロともになる

QRコード
QRコード