「これからはじめるvim」の版間の差分

提供: neovim/vim入門
移動: 案内検索
(ページの作成:「vimとは、非常にパワフルなエディタの1つです。vimは、viを機能拡張したものです。 '''読み方''' ;vim:ぶいあいえむ、...」)
(相違点なし)

2014年4月11日 (金) 00:12時点における版

vimとは、非常にパワフルなエディタの1つです。vimは、viを機能拡張したものです。

読み方

vim
ぶいあいえむ、びむ
vi
ぶいあい

概要

ここで説明する機能は、viで使用できないものもあるため、vimではなく、純粋なviを使用している場合には注意が必要です。 この文章を説明する内容は、だいたい以下の通りです。

  • イントロダクション/能書き
  • 移動系
  • 編集系
  • サーチ
  • マーク
  • Visual系
  • 補完
  • undo
  • バッファ

このドキュメントの対象者は、vimを使い始めて、少し慣れた人です。

イントロダクション/能書き

  • vim はパワフル
  • vim との会話(コマンド)が必要
  • 想像できることは、なんでもできる、かも
  • コマンドは解りにくいし、難しい
  • でも、やっぱり素晴らしい

エディタ

  • vim
  • emacs
  • notepad.exe
  • ...
  • いろいろあるけど、好きなものを使えばいい
  • 機能を覚えて、使えること・技を増やして、効率化するのが大事

モード

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
  • inset mode
  • 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 http://www.ph.unimelb.edu.au/~ssk/vim/insert.html


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
  • 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
  • ]#, [#
  1. 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>

関連項目