「これからはじめるvim」の版間の差分
提供: neovim/vim入門
行28: | 行28: | ||
* でも、やっぱり素晴らしい | * でも、やっぱり素晴らしい | ||
+ | * 「それ、〇〇○で出来るよ」 | ||
+ | * 「それ、Vimで出来るよ」 | ||
== エディタ == | == エディタ == | ||
* vim | * vim | ||
行36: | 行38: | ||
* いろいろあるけど、好きなものを使えばいい | * いろいろあるけど、好きなものを使えばいい | ||
* 機能を覚えて、使えること・技を増やして、効率化するのが大事 | * 機能を覚えて、使えること・技を増やして、効率化するのが大事 | ||
+ | |||
+ | == 前提となってる設定 == | ||
+ | いろいろと設定をいじってある環境のせいで、デフォルトの動きと違うかもしれません。 | ||
+ | <syntaxhighlight lang="vim"> | ||
+ | set nocompatible | ||
+ | </syntaxhighlight> | ||
== モード == | == モード == | ||
行48: | 行56: | ||
* :help | * :help | ||
* grep だってできる | * grep だってできる | ||
− | * :helpgrep XXX | + | * <syntaxhighlight lang="vim"> |
+ | :helpgrep XXX | ||
+ | </syntaxhighlight> | ||
** copen/cnext/cprev/cclose | ** copen/cnext/cprev/cclose | ||
== チュートリアル == | == チュートリアル == | ||
まずは、一度はやってみた方が良いです。 | まずは、一度はやってみた方が良いです。 | ||
+ | <syntaxhighlight lang="bash"> | ||
vimtutor | vimtutor | ||
+ | </syntaxhighlight> | ||
== エスケープ == | == エスケープ == | ||
行68: | 行80: | ||
* viを使ってる意味があるのか? | * viを使ってる意味があるのか? | ||
+ | <pre> | ||
b B w W e | b B w W e | ||
ge gE | ge gE | ||
+ | </pre> | ||
+ | <pre> | ||
C-f C-b | C-f C-b | ||
C-u C-d | C-u C-d | ||
C-y C-e | C-y C-e | ||
+ | </pre> | ||
* g gg G | * g gg G | ||
行88: | 行104: | ||
* g; | * g; | ||
+ | <pre> | ||
+ - <Enter> | + - <Enter> | ||
+ | </pre> | ||
+ | <pre> | ||
{ } [[ ]] ( ) | { } [[ ]] ( ) | ||
+ | </pre> | ||
+ | <syntaxhighlight lang="vim"> | ||
% | % | ||
+ | </syntaxhighlight> | ||
− | + | 画面固定でカーソル移動 | |
+ | <pre> | ||
H L M | H L M | ||
+ | </pre> | ||
− | + | カーソル位置に画面移動 | |
+ | <pre> | ||
z<Enter> z. z- | z<Enter> z. z- | ||
+ | </pre> | ||
== 編集系 == | == 編集系 == | ||
行127: | 行153: | ||
== シフト == | == シフト == | ||
− | * >> | + | * <syntaxhighlight lang="vim"> |
− | * << | + | >> |
+ | </syntaxhighlight> | ||
+ | * <syntaxhighlight lang="vim"> | ||
+ | << | ||
+ | </syntaxhighlight> | ||
== フォーマットする == | == フォーマットする == | ||
行147: | 行177: | ||
== 検索/search == | == 検索/search == | ||
+ | === 基本的な検索 === | ||
* / | * / | ||
** n | ** n | ||
** N | ** N | ||
− | + | === よりよい検索 === | |
− | + | ||
* /do\|we | * /do\|we | ||
* /hoge/e | * /hoge/e | ||
行157: | 行187: | ||
* set incsearch | * set incsearch | ||
− | + | === もっと検索 === | |
* ? | * ? | ||
* * | * * | ||
行201: | 行231: | ||
* buffer explorer - bufexplorer.vim | * buffer explorer - bufexplorer.vim | ||
* bufferlist.vim | * bufferlist.vim | ||
− | |||
== argdo == | == argdo == | ||
* cd sample/argdo/ | * cd sample/argdo/ | ||
行210: | 行239: | ||
! | ! | ||
* example ... date / cal | * example ... date / cal | ||
− | * r! | + | * <syntaxhighlight lang="vim"> |
+ | r! | ||
+ | </syntaxhighlight> | ||
* !! | * !! | ||
− | * !sort | + | * <syntaxhighlight lang="vim"> |
+ | !sort | ||
c | c | ||
a | a | ||
b | b | ||
− | + | </syntaxhighlight> | |
+ | sample/cmd_exec/Makefile | ||
− | + | == insert モード == | |
* C-c | * C-c | ||
* C-a | * C-a | ||
行227: | 行260: | ||
* C-j | * C-j | ||
* C-m | * C-m | ||
− | |||
+ | == 挿入モードとレジスタ == | ||
* C-r # | * C-r # | ||
* C-r % | * C-r % | ||
行240: | 行273: | ||
* C-r 1 | * C-r 1 | ||
** ddしたコピー | ** ddしたコピー | ||
− | |||
== 挿入モードでも、画面を動かす == | == 挿入モードでも、画面を動かす == | ||
+ | <syntaxhighlight lang="vim"> | ||
C-x | C-x | ||
C-x-e scroll window | C-x-e scroll window | ||
C-x-y scroll window | C-x-y scroll window | ||
− | + | </syntaxhighlight> | |
− | + | ||
− | + | ||
== ex-mode で楽をする == | == ex-mode で楽をする == | ||
* :C-f | * :C-f | ||
行257: | 行288: | ||
* @: | * @: | ||
− | 画面分割 | + | == 画面分割 == |
+ | <syntaxhighlight lang="vim"> | ||
:sp :vsp | :sp :vsp | ||
+ | </syntaxhighlight> | ||
+ | <pre> | ||
C-w-w C-w-h C-w-j C-w-l C-w-l | C-w-w C-w-h C-w-j C-w-l C-w-l | ||
C-w-= C-w-+ C-w-- | C-w-= C-w-+ C-w-- | ||
+ | </pre> | ||
vim /etc/rc.conf /etc/hosts | vim /etc/rc.conf /etc/hosts | ||
:sball | :sball | ||
+ | プラグイン | ||
ZoomWin.vim | ZoomWin.vim | ||
− | + | == 入力補完 == | |
* C-p C-n | * C-p C-n | ||
* C-x C-l | * C-x C-l | ||
行286: | 行322: | ||
* v V C-v | * v V C-v | ||
* gv | * gv | ||
− | * '< | + | * <syntaxhighlight lang="vim"> |
− | * '> | + | '< |
+ | </syntaxhighlight> | ||
+ | * <syntaxhighlight lang="vim"> | ||
+ | '> | ||
+ | </syntaxhighlight> | ||
+ | |||
== text-object == | == text-object == | ||
* カーソルが最初にないなら | * カーソルが最初にないなら | ||
行362: | 行403: | ||
** sample/cmd_exec/a.c | ** sample/cmd_exec/a.c | ||
− | * [<tab> | + | * <syntaxhighlight lang="vim"> |
+ | [<tab> | ||
+ | </syntaxhighlight> | ||
* ビジュアルモードと組み合わせる | * ビジュアルモードと組み合わせる | ||
行388: | 行431: | ||
#ifdef HOGE #ifdef ZERO // 1 #else // 2 #endif #endif | #ifdef HOGE #ifdef ZERO // 1 #else // 2 #endif #endif | ||
− | + | <syntaxhighlight lang="c"> | |
− | + | #include <signal.h> | |
− | + | </syntaxhighlight> | |
+ | <syntaxhighlight lang="vim"> | ||
+ | :ijump SIGINT | ||
+ | </syntaxhighlight> | ||
[ C-i と同じ | [ C-i と同じ | ||
− | + | sample/cmd_exec/a.c | |
== make == | == make == | ||
行408: | 行454: | ||
* ports/ctags | * ports/ctags | ||
− | |||
− | |||
== PHP == | == PHP == | ||
* php 文字列ハイライトと折りたたみ <syntaxhighlight lang="vim"> | * php 文字列ハイライトと折りたたみ <syntaxhighlight lang="vim"> |
2014年4月14日 (月) 23:45時点における版
vimとは、非常にパワフルなエディタの1つです。vimは、viを機能拡張したものです。
読み方
- vim
- ぶいあいえむ、びむ
- vi
- ぶいあい
目次
- 1 概要
- 2 イントロダクション/能書き
- 3 エディタ
- 4 前提となってる設定
- 5 モード
- 6 ヘルプ
- 7 チュートリアル
- 8 エスケープ
- 9 移動系
- 10 編集系
- 11 ヤンク
- 12 シフト
- 13 フォーマットする
- 14 (インクリ|デクリ)メント
- 15 検索/search
- 16 マーク
- 17 バッファを操る
- 18 バッファリスト
- 19 argdo
- 20 コマンドを実行する
- 21 insert モード
- 22 挿入モードとレジスタ
- 23 挿入モードでも、画面を動かす
- 24 ex-mode で楽をする
- 25 画面分割
- 26 入力補完
- 27 アンドゥ リドゥ
- 28 visual mode
- 29 text-object
- 30 tab
- 31 プログラミング
- 32 make
- 33 omni
- 34 PHP
- 35 php 文法チェック
- 36 perl 文法チェック
- 37 便利系?
- 38 vimdiff
- 39 vim で man を見る
- 40 ファイルを開くときの補完
- 41 vimgrep
- 42 行番号を表示してみる
- 43 ファイラ
- 44 vim エラーメッセージ
- 45 ファイルフォーマット
- 46 関連項目
概要
ここで説明する機能は、viで使用できないものもあるため、vimではなく、純粋なviを使用している場合には注意が必要です。 この文章を説明する内容は、だいたい以下の通りです。
- イントロダクション/能書き
- 移動系
- 編集系
- サーチ
- マーク
- Visual系
- 補完
- undo
- バッファ
このドキュメントの対象者は、vimを使い始めて、少し慣れた人です。
イントロダクション/能書き
- vim はパワフル
- vim との会話(コマンド)が必要
- 想像できることは、なんでもできる、かも
- コマンドは解りにくいし、難しい
- でも、やっぱり素晴らしい
- 「それ、〇〇○で出来るよ」
- 「それ、Vimで出来るよ」
エディタ
- vim
- emacs
- notepad.exe
- ...
- いろいろあるけど、好きなものを使えばいい
- 機能を覚えて、使えること・技を増やして、効率化するのが大事
前提となってる設定
いろいろと設定をいじってある環境のせいで、デフォルトの動きと違うかもしれません。
set nocompatible
モード
vi はモードがあるエディタです。
- 通常モード
- 挿入モード
- コマンドライン
- ビジュアルモード
ヘルプ
- ヘルプは、非常に充実している
- :help
- grep だってできる
-
:helpgrep XXX
- copen/cnext/cprev/cclose
チュートリアル
まずは、一度はやってみた方が良いです。
vimtutor
エスケープ
モードの切り替えに使う
- わからなくなったらとりあえず esc を連射
- 普通のkbdだとホームポジションからズレる
- C-[ は esc と同じ
- ホームポジションが崩れない
移動系
- h j k l
- カーソルキーは使わない
- ホームポジションから外れる
- viを使ってる意味があるのか?
b B w W e ge gE
C-f C-b C-u C-d C-y C-e
- g gg G
- go
- g gj gk g0 g$
- gd gD
- プログラムで。変数の場所。
- sample/cmd_exec/a.c
- gm
- gi
- g;
+ - <Enter>
{ } [[ ]] ( )
%
画面固定でカーソル移動
H L M
カーソル位置に画面移動
z<Enter> z. z-
編集系
- i I
- J gJ
- o O
- a A
- r R
- s S
- c C
- c$
- cw ct
- cW
- .
- d dd D dw db
- 大文字・小文字
- guu guw gUw g~w g~~
- hoge
- HOGE hoge
ヤンク
- y p P
- YankRing.vim
- display
シフト
-
>>
-
<<
フォーマットする
- gqap
- gqq
- gw
- gww
- gwap
ga ascii
(インクリ|デクリ)メント
- C-a
- C-x
dib function argument delete diB function body delete
検索/search
基本的な検索
- /
- n
- N
よりよい検索
- /do\|we
- /hoge/e
- set hlsearch
- set incsearch
もっと検索
- ?
- *
- #
- g*
- f
- F
- t
- T
- :g
- /\(where\|update\)
- /^\n\{2} search multi line
- search option
- /error\c
- set ignorecase
- set smartcase
マーク
m<a> `<a> `` :`a,.d
q @ i += 0; qa yy p w w C-a q @a 10@a
バッファを操る
- ls
- n
- N
- bn
- bp
- :b N
- C-^ (C-6)
バッファリスト
- buffer explorer - bufexplorer.vim
- bufferlist.vim
argdo
- cd sample/argdo/
- vim *
- argdo %s/bar/meta/g
コマンドを実行する
!
- example ... date / cal
-
r!
- !!
-
!sort c a b
sample/cmd_exec/Makefile
insert モード
- C-c
- C-a
- C-@
- C-w
- C-u
- C-i or Tab
- C-j
- C-m
挿入モードとレジスタ
- C-r #
- C-r %
- C-r /
- C-r . 最後に挿入したテキスト
- C-r : 最後のコマンドライン
- C-rC-W
- C-r =
- C-r 1
- ddしたコピー
挿入モードでも、画面を動かす
C-x C-x-e scroll window C-x-y scroll window
ex-mode で楽をする
- :C-f
- :C-p
- :C-n
- :C-d
- :<tab>
- @:
画面分割
:sp :vsp
C-w-w C-w-h C-w-j C-w-l C-w-l C-w-= C-w-+ C-w--
vim /etc/rc.conf /etc/hosts :sball
プラグイン ZoomWin.vim
入力補完
- C-p C-n
- C-x C-l
- C-x C-f
- C-x C-k dict
- C-x C-i C
.vimrc
autocmd FileType php :set dictionary=~/.vim/dict/php.dict
アンドゥ リドゥ
- u
- U
- C-r
- set undolevels=1000
visual mode
- v V C-v
- gv
-
'<
-
'>
text-object
- カーソルが最初にないなら
- b ve
- viw
- b dw
- diw
- b ve
- operater
- d, c, y
text-object キー 意味 w word s sentence p paragraph b () block B {} block < <> block [ [] block " "" block ' block is inner sentence as a sentence - sample/cmd_exec/a.cc
- /main di(
- /hoge/e di"
- /hoge/e da"
tab
- tabnew/tabnext/tabprevious/tabclose/tabonly
- gt/gT
- C-w gf
- tablist
nmap <Tab> :tabn<CR> nmap <S-Tab> :tabp<CR>
プログラミング
- %
- C-v } =
- [I include
- [i include first
- [D define
- [d define first
- sample/cmd_exec/a.c
-
[<tab>
- ビジュアルモードと組み合わせる
- insert mode
- C-t
- C-d
- プログラムでの移動
- ]/ コメントの終わりへ
- [/ コメントの最初へ
- [[ 関数のはじめ
- ]] 関数の終わり
- [] まえの関数の終わりへ
- ][ 次の関数の終わりへ
メソッドの前、後ろへ移動できます。
- [m
- [M
- ]m
- ]M
- ]#, [#
- ifdef HOGE #ifdef ZERO // 1 #else // 2 #endif #endif
#include <signal.h>
:ijump SIGINT
[ C-i と同じ
sample/cmd_exec/a.c
make
- vim から make を呼ぶ
- :make
- cd sample/make/
omni
- sample/omni/
- C-w ] 分割してタグジャンプ
- exctags -R /usr/include/ .
- psearch fopen
- pclose
- ptag
- ports/ctags
PHP
- php 文字列ハイライトと折りたたみ
au Syntax php set fdm=syntax
- " 文字列中のSQLをハイライト
let php_sql_query=1
- " 文字列中のHTMLをハイライト
let php_htmlInStrings=1
- " クラスと関数の折りたたみ
let php_folding=1
php 文法チェック
php -l foo.php
au Syntax php set makeprg=php\ -l\ % au Syntax php set errorformat=%m\ in\ %f\ on\ line\ %l
- sample/php/syntax_error.php
perl 文法チェック
perl -c %
便利系?
vimdiff
$ vim -d v1.cc v2.cc $ vimdiff v1.cc v2.cc
- sample/vimdiff
vim で man を見る
- K
- Man
- \K
- fopen
- ls
ファイルを開くときの補完
- コマンドライン補間をシェルのように
set wildmode=list:longest
vimgrep
- vimgrep world *
- vimgrep string\c *
- vimgrep c_str **/*.cc
- vimgrep /str/g *
cat<<<EOF>a.vim %s/<?/<?php/g write quite EOF
for f in *.php; do vim -e -s $f < a.vim done
ls | vim - # これは ls > /tmp/x; vim /tmp/x ls | vim -S b.vim -
行番号を表示してみる
set nu set nonu
ファイラ
:Explore
- コマンド - o p s i r -
- e ./
:enew
ls.vim http://www.vim.org/scripts/script.php?script_id=17 VTreeExplore.vim grep.vim B
vim エラーメッセージ
:messages
ファイルフォーマット
unix/dos
:set fileformat=unix " 省略形 :set ff=unix
- browse options
参考 http://www.vim.org/ function! TabOrCompletion()
let col = col('.') - 1 if !col || getline('.')[col - 1] !~ '\k' return "\<TAB>" else return "\<C-N>" endif
endfunction
- inoremap <silent> <TAB> <C-R>=TabOrCompletion()<CR>
関連項目