Memo

メモ > サーバ > 各論: Vim

Vim
テキストエディタ。
Vim基本操作
$ vi
と入力すると、大抵の環境ではVimが立ち上がる。 ただしrootの場合はviが立ち上がるので、vimと指定する必要がある。 (後述する /etc/profile.d/vim.sh で制御できる。) viは操作が特殊なので慣れは必要。 まずは超基本だけ! viの基本的な使い方【Linux入門】 https://eng-entrance.com/linux-vi-base ■Vimチュートリアル
$ vimtutor
を実行すると、Vimのチュートリアルが表示される。少しずつでも進めるといい。 「Vimを使い始めようと思うんですけど、おすすめを教えてください」 http://kannokanno.hatenablog.com/entry/20121217/1355694191 ■基本操作 i ... 入力モードに切り替え。 yy ... 一行コピー。 p ... 貼り付け。 dd ... 一行削除。 ^ ... 行頭へ移動。 $ ... 行末へ移動。 gg ... ファイルの先頭へ移動。 G ... ファイルの最後へ移動。 :e ... 再読み込み。 :q ... 終了。 :q! ... 強制終了。 :w ... 保存。 :wq ... 保存して終了。 /xx ... xxを検索。(「n」で次を検索 / 「N」で前を検索。) ?xx ... xxを検索。(「/xx」とは逆に検索。) u ... アンドゥ。 Ctrl+R ... リドゥ。 :set number ... 行番号の表示。 :set nonumber ... 行番号の非表示。 :行番号 ... 指定した行へ移動。 :set nowrap ... 折返し表示なし。 :set wrap ... 折返し表示あり。 :set paste ... ペーストモード。(自動インデントなどされないように。) :set nopaste ... ペーストモード解除。 :set mouse=a ... マウスを使う。(クリックでカーソルを移動できたり。) 操作方法は以下も参考になる。 とほほのVim入門 - とほほのWWW入門 https://www.tohoho-web.com/ex/vim.html とりあえずvimを使えるようになりたい人のための記事 https://zenn.dev/vim_jp/articles/0009-just_want_to_be_able_to_use_for_vim_begineer ■移動 vimを使うとき十字キーで移動して、vimmerに殺されるその前に - Qiita https://qiita.com/fasahina/items/2767891134028648f288 Vimにおけるカーソル移動の効率化 https://zenn.dev/skanehira/articles/2022-01-29-vim-cursor-jump ■画面分割 :split ... 画面を上下に分割する。 :vsplit ... 画面を左右に分割する。 Ctrl+W → k ... 分割した上のウインドウに移動。 Ctrl+W → j ... 分割した下のウインドウに移動。 Ctrl+W → h ... 分割した左のウインドウに移動。 Ctrl+W → l ... 分割した右のウインドウに移動。 Ctrl+W → K ... 分割したウインドウを上に移動。 Ctrl+W → J ... 分割したウインドウを下に移動。 Ctrl+W → H ... 分割したウインドウを左に移動。 Ctrl+W → L ... 分割したウインドウを右に移動。 Ctrl+W → > ... 分割したウインドウの幅を増やす。 Ctrl+W → < ... 分割したウインドウを幅を減らす。 Ctrl+W → + ... 分割したウインドウを高さを増やす。 Ctrl+W → - ... 分割したウインドウを高さを減らす。 ■タブ :newtab ... 新規にタブを開く。 gt ... 次のタブに移動。 gT ... 前のタブに移動。 ■一括コメントアウト Ctrl+G で現在の行番号を表示。
:74,222 s/^/#
で74行目〜222行目を一括コメントアウト。 ■PoderosaでVimを使っているとき、Windowsのクリップボードにコピーする ドラッグ&ドロップでテキストを選択し、 「右クリック → コピー」もしくは「編集 → コピー」とすればコピーできる。 ■ジョブの切り替え vim使用中、Ctrl+Zでコマンド入力に戻る。ただし作業は終了していない。
$ jobs [1]- 停止 vim test1.txt [2]+ 停止 vim test2.txt [4] 停止 vim test4.txt
で一時停止中のジョブを表示できる。
$ fg 4
のように入力すると、特定のジョブを起動できる。
$ fg
と入力すると、+が付いているジョブを起動できる。 ■ファイルの履歴 :browse oldfiles :bro ol Vimで使える「最近使ったファイル」を開く方法 - Vim 力を上げたい Vimmer の軌跡 http://vimtry1.hateblo.jp/entry/2016/12/27/101346
Vim基本設定
■rootのviでvimを呼ぶ 一般ユーザではviコマンドでvimが呼ばれるが、rootではviでvimが呼ばれないみたい。 viではなくvimを直接指定すればいいが、viで自動的にvimを呼び出したければ以下の設定を調整する。 (初期設定では、ユーザのIDが200より小さい場合はvimを呼ばないようになっている。)
# vi /etc/profile.d/vim.sh … Vimの設定ファイルを編集。
if [ -n "$BASH_VERSION" -o -n "$KSH_VERSION" -o -n "$ZSH_VERSION" ]; then [ -x /usr/bin/id ] || return ID=`/usr/bin/id -u` # [ -n "$ID" -a "$ID" -le 200 ] && return … コメントアウトする。 # for bash and zsh, only if no alias is already set alias vi >/dev/null 2>&1 || alias vi=vim fi
ログインし直すとrootでも色が反映される。 また、ターミナルの種類が「kterm」だと色分けは反映されないみたい。「xterm」を選択する。 rootのviに色を付ける http://blog.dacelo.info/linux/entry-759.html ■vimrc 何も考えず~/.vimrcにこれを書くんだ! 〜vim初心者によるvim初心者のためのvim入門〜 http://qiita.com/mfujimori/items/9fd41bcd8d1ce9170301 めんどくせーからvimrcそのまま晒す http://qiita.com/kotashiratsuka/items/dcd1f4231385dc9c78e7 初心者向け vimrcの設定方法 http://qiita.com/iwaseasahi/items/0b2da68269397906c14c 個人的に便利だと思うVimの基本設定のランキングを発表します! http://itchyny.hatenablog.com/entry/2014/12/25/090000 ぼくのかんがえたさいしょうのvimrc http://deris.hatenablog.jp/entry/2014/05/20/235807 ■vimrc設定例
$ vim ~/.vimrc
" 基本の設定 "文字コードをUFT-8に設定 set fenc=utf-8 " 編集中のファイルが変更されたら自動で読み直す set autoread " バッファが編集中でもその他のファイルを開けるように set hidden " 入力中のコマンドをステータスに表示する set showcmd " 見た目の設定 " 行番号を表示 set number " 現在の行を強調表示 set cursorline " 行末の1文字先までカーソルを移動できるように set virtualedit=onemore " インデントはスマートインデント set smartindent " ビープ音を可視化 set visualbell " 括弧入力時の対応する括弧を表示 set showmatch " ステータスラインを常に表示 set laststatus=2 " コマンドラインの補完 set wildmode=list:longest " 折り返し時に表示行単位での移動できるようにする nnoremap j gj nnoremap k gk " タブの設定 " 不可視文字を可視化(タブが「..」と表示される) set list listchars=tab:\.\. " タブ文字を半角スペースにする set expandtab " 行頭以外のタブ文字の表示幅(スペースいくつ分) set tabstop=2 " 行頭でのタブ文字の表示幅 set shiftwidth=2 " 入力の設定 " [Ctrl]+zでアンドゥ inoremap <C-z> <Esc>ui " [Ctrl]+yでリドゥ inoremap <C-y> <Esc><C-r><Insert> " マウスを使う set mouse=a " 検索の設定 " 検索文字列が小文字の場合は大文字小文字を区別なく検索する set ignorecase " 検索文字列に大文字が含まれている場合は区別して検索する set smartcase " 検索文字列入力時に順次対象文字列にヒットさせる set incsearch " 検索時に最後まで行ったら最初に戻る set wrapscan " 検索語をハイライト表示 set hlsearch " ESC連打でハイライト解除 nmap <Esc><Esc> :nohlsearch<CR><Esc>
■ペースト時の自動インデントを無効にする :set paste ... ペーストモード。(自動インデントなどされないように。) :set nopaste ... ペーストモード解除。 もしくは以下の方法でも、余計なインデントなしでペーストできる。 :a ペースト。 ESC ■改行での自動コメントアウトを無効にする 「:」に続けて以下のコマンドを指定すれば無効になる。 ただし「~/.vimrc」に記載しても反映されないので、毎回実行する必要がある。どういう対応がいいのかは要調査。 (ひとまず、上記のペーストモードで大丈夫そう。) set formatoptions-=ro Vimで改行時の自動コメントアウトを無効化 http://qiita.com/necojackarc/items/1f997481764ed42023a7
Vimプラグイン
■dein.vim Vimのプラグインを管理できる。
$ mkdir -p ~/.vim/bundle $ curl https://raw.githubusercontent.com/Shougo/dein.vim/master/bin/installer.sh > installer.sh $ sh installer.sh ~/.vim/bundle
以下が出力される。
Please add the following settings for dein to the top of your vimrc (Vim) or init.vim (NeoVim) file: "dein Scripts----------------------------- if &compatible set nocompatible " Be iMproved endif " Required: set runtimepath+=/home/refirio/.vim/bundle/repos/github.com/Shougo/dein.vim " Required: if dein#load_state('/home/refirio/.vim/bundle') call dein#begin('/home/refirio/.vim/bundle') " Let dein manage dein " Required: call dein#add('/home/refirio/.vim/bundle/repos/github.com/Shougo/dein.vim') " Add or remove your plugins here: call dein#add('Shougo/neosnippet.vim') call dein#add('Shougo/neosnippet-snippets') " You can specify revision/branch/tag. call dein#add('Shougo/vimshell', { 'rev': '3787e5' }) " Required: call dein#end() call dein#save_state() endif " Required: filetype plugin indent on syntax enable " If you want to install not installed plugins on startup. if dein#check_install() … コメント解除。 call dein#install() … コメント解除。 endif … コメント解除。 "End dein Scripts-------------------------
出力された内容を、vimrc に貼り付ける。 (上のサンプルは環境依存のパスを含むので、自分の環境で表示されたコードを貼り付ける。)
$ vim ~/.vimrc … vimrcに追加。
次回vim起動時、必要なプログラムが自動でインストールされる。 dein.vim/README.md at be226d268a47e79f3452a7e286d040cbca68b7bf - Shougo/dein.vim https://github.com/Shougo/dein.vim/blob/be226d268a47e79f3452a7e286d040cbca68b7bf/README.md dein.vim インストール ~ 0から始めるvim ~ - Qiita https://qiita.com/ymiyamae/items/e14059b77ba1cf0b344c ■ファイルの履歴表示
$ vim ~/.vimrc … vimrcを編集。
" Add or remove your plugins here: call dein#add('Shougo/neosnippet.vim') call dein#add('Shougo/neosnippet-snippets') call dein#add('ctrlpvim/ctrlp.vim') … 追加。
次回vim起動時、NERDTreeが自動でインストールされる。 インストール後、Ctrl+P で履歴が表示される。 ファイル名を入力すると絞り込まれる。 Enter で現在のタブで開く。Ctrl+T で新規タブで開く。 ■ファイルをツリー表示
$ vim ~/.vimrc … vimrcを編集。
" Add or remove your plugins here: call dein#add('Shougo/neosnippet.vim') call dein#add('Shougo/neosnippet-snippets') call dein#add('scrooloose/nerdtree') … 追加。 call dein#add('jistr/vim-nerdtree-tabs') … 追加。
次回vim起動時、NERDTreeが自動でインストールされる。 インストール後、vim使用中に以下を実行するとツリーが表示される。 :NERDTreeToggle 毎回上記のコマンドを入力するのは面倒なので、 自動起動させるか、ショートカットで起動させるといい。
$ vim ~/.vimrc
" 「,」に続けて各キーを入力すると各コマンドを実行 let mapleader="," " NERDTree autocmd VimEnter * execute 'NERDTree' … NERDTreeを自動起動させる。 let NERDTreeShowHidden = 1 … 隠しファイルを表示させる。 nnoremap <silent><C-e> :NERDTreeToggle<CR> … Ctrl+Eで起動/終了させる。 nnoremap <Leader><Tab> <C-w>w … ,+<Tab>でツリーと編集領域を移動。
dein.vim で ディレクトリツリーを表示させる方法 ~ 0から始めるvim ~ - Qiita https://qiita.com/ymiyamae/items/561cb4a5b247deb2ebc1 基本的な使い方 o(Enter) ... ファイルを開く。 t ... タブで開く。(タブは gt と gT コマンドで移動。) i ... 水平分割して開く。 s ... 垂直分割して開く。 vim-plugin NERDTree で開発効率をアップする! - Qiita https://qiita.com/zwirky/items/0209579a635b4f9c95ee Vimプラグイン「NERDTree」設定・コマンド備忘録 http://kontany.net/blog/?p=112 ■ミニマップを表示 ※NERDTreeToggleの表示が乱れる上に、コードのカラー表示が反映されないため見送り。 「vim minimap」で検索すると他にもあるようなので試す。 GitHub - severin-lemaignan/vim-minimap: A Sublime-like minimap for VIM, based on the Drawille console-based drawing library https://github.com/severin-lemaignan/vim-minimap
$ vim ~/.vimrc … vimrcを編集。
" Add or remove your plugins here: call dein#add('Shougo/neosnippet.vim') call dein#add('Shougo/neosnippet-snippets') call dein#add('severin-lemaignan/vim-minimap') … 追加。
次回vim起動時、minimapが自動でインストールされる。 インストール後、vim使用中に以下を実行するとミニマップの表示/非表示を切り替えられる。 :Minimap :MinimapClose 以下の設定でコードがカラー表示されると思ったが反映されず。
$ vim ~/.vimrc
" minimap let g:minimap_highlight='Visual'
■Atomの「One Dark」を再現 ※普段使っているAtomとまったく同じ見た目になるわけでも無かったので、いったん導入は見送り。
$ vim ~/.vimrc … vimrcを編集。
" Add or remove your plugins here: call dein#add('Shougo/neosnippet.vim') call dein#add('Shougo/neosnippet-snippets') call dein#add('joshdick/onedark.vim') … 追加。
有効にするためには以下の設定も必要。
$ vim ~/.vimrc
" One Dark let g:onedark_termcolors=16 … One Darkを有効にする。 colorscheme onedark … カラースキーマを宣言する。
メモ
■キーの割当はよく考えたい Vim のカスタマイズ 〜キー割り当て変更方法〜 - Vim のブログ http://vimblog.hatenablog.com/entry/vimrc_key_mapping Vimの設定ファイル晒し - Qiita https://qiita.com/rita_cano_bika/items/2ae9c8304f8f12b1b443 ■色々なプラグインを試したい Vim入門(2): Vimのおすすめプラグイン23個とその設定 | Simplie Post http://post.simplie.jp/posts/56 Vim Is The Perfect IDE https://dev.to/allanmacgregor/vim-is-the-perfect-ide-e80

Advertisement