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

オレ的vimプラグイン10選

$
0
0

vim歴5年くらいの私が使っているvimのpluginの中から、無いと私が死ぬプラグインをいくつかピックアップして紹介したいと思います。

ちなみに.vimrcファイルはgithubで公開しています。

動作環境

  • Linux MInt 18.2
  • kernel 4.10.0-40-generic
  • NVIM v0.2.3-dev

プラグイン管理

プラグイン管理はShougo/dein.vimで行っています。
dein.vimは従来のNeoBundle等と比べ高速だったり、プラグインをtoml形式で別ファイルに記述できます。(私は.vimrc内に書いてますが)

ale

w0rp/ale
Vim8/NeoVimから搭載された非同期プロセスの機能を利用して、各種Lintを非同期実行できるプラグインです。
以前はsyntasticを使用していたのですが、同期実行のため、巨大なファイルやLintツールが遅い言語等でチェックを書けた場合、vimの操作自体がブロックされていました。
ですが、aleは非同期実行ですので、Lintツールによるチェック中も自由にvimを操作することができます。

aleに関する設定は以下の通りです。

" 保存時のみ実行するletg:ale_lint_on_text_changed =0" 表示に関する設定letg:ale_sign_error =''letg:ale_sign_warning =''letg:airline#extensions#ale#open_lnum_symbol ='('letg:airline#extensions#ale#close_lnum_symbol =')'letg:ale_echo_msg_format ='[%linter%]%code: %%s'highlight link ALEErrorSign Taghighlight link ALEWarningSign StorageClass" Ctrl + kで次の指摘へ、Ctrl + jで前の指摘へ移動
nmap <silent><C-k><Plug>(ale_previous_wrap)
nmap <silent><C-j><Plug>(ale_next_wrap)

画面はこんな感じになります。
01.png

vim-table-mode

dhruvasagar/vim-table-mode
テーブルをいい感じに整形してくれるプラグインです。
エクセル起動するのが面倒なレベルの小さい表の時によく使ってます。
:TableModeToggleでon/offを切り替えられます。

.vimrc中にlet g:table_mode_corner = '|'を指定することで、Markdown記法のテーブル表記にしています。

sonictemplate-vim

mattn/sonictemplate-vim
新規にファイルを作成する場合に使用するテンプレート機能です。
:Template <tab>と入力することで候補が表示されます。

自分でテンプレートを追加し、vimのfiletypeごとに管理することができます。
ちょっとしたスクリプトを書くことが多いshellやpython3の雛形を用意して使っています。

私は自作のテンプレートは次のように管理しています。

  • .vimrclet g:sonictemplate_vim_template_dir = ['~/.vim/template']と記述する
  • テンプレートはdotfilesリポジトリ内で管理する
  • ln -s path/to/dotfiles/vim/template ~/.vim/templateでシンボリックリンクを作成する

このように管理することでリポジトリをpullして最新を取得するだけで、どのマシンでも同じテンプレートを使うことができます。

vim-cheatsheet

reireias/vim-cheatsheet
自作のチートシート(メモ)を別ペインで表示するプラグインです。
自分で書いたチートシートを表示できるプラグインが無かったので自分で作りました。
:Cheatで表示/非表示を切り替えることができます。

.vimrc中にlet g:cheatsheet#cheat_file = '~/.cheatsheet.md'のように設定することで開くファイルを管理できます。
当然このファイルもdotfilesで管理し、シンボリックリンクで配置しています。

私はこんな感じでvimの操作に関するメモをいくつか書いています。

02.png

winresizer

simeji/winresizer
:sp:vs:help等で複数ウィンドウを表示した際に、ウィンドウの分割サイズを簡単に調整するプラグインです。
プラグインのヘルプを見る際や後述のvim-quickrunを使用する際に便利です。

使い方は以下の通りです。

  • Ctrl + eでリサイズを開始
  • h/j/k/l or 方向キーでウィンドウサイズを調整
  • Enterで確定

デフォルトだと垂直方向は10行単位、水平方向は3文字単位で移動されるので、私は下記設定で1ずつ動くように変更しています。
vim
let g:winresizer_vert_resize = 1
let g:winresizer_horiz_resize = 1

vim-quickrun

thinca/vim-quickrun
vimを閉じずに編集中のファイルを素早く実行するプラグインです。
shellやpythonの簡単なスクリプトを書きながら確認する際にとても便利です。
オプションを指定することで実行時の引数も指定できます。(詳しくは:h quickrunで参照してください)

デフォルトのショートカットでは<Leader> + rで実行することができます。

03.gif

vim-fugitive

tpope/vim-fugitive
vimからGitの各種コマンドを実行できるようにするプラグインです。

git blameに相当する:Gblameが個人的にかなり便利です。

TOOD: capture

vim-airline

vim-airline/vim-airline
vimの下部に表示されるステータスラインを装飾するプラグインです。
カスタマイズ次第でファイル名、gitのブランチ名、ファイルの種類、文字コード、改行コード、Lintの指摘数等、様々な情報を表示できます。

私は併せて下記プラグインも利用しています。
- vim-airline/vim-airline-themes
- ryanoasis/vim-devicons

vim-deviconsを追加することで、改行コードやファイルタイプ等にアイコンフォントが使用されるようになります。

設定値個々の説明は省きますが、私は次のように設定しています。

letg:airline_theme ='wombat'setlaststatus=2letg:airline#extensions#branch#enabled =1letg:airline#extensions#tabline#enabled =1letg:airline#extensions#wordcount#enabled =0letg:airline#extensions#default#layout = [['a','b','c'], ['x','y','z']]letg:airline_section_c ='%t'letg:airline_section_x ='%{&filetype}'letg:airline_section_z ='%3l:%2v %{airline#extensions#ale#get_warning()} %{airline#extensions#ale#get_error()}'letg:airline#extensions#ale#error_symbol =' 'letg:airline#extensions#ale#warning_symbol =' 'letg:airline#extensions#default#section_truncate_width = {}letg:airline#extensions#whitespace#enabled =1

04.png

vim-go

fatih/vim-go
たぶんgolangのプラグインでは一番有名なやつ。最強。

よく使う機能は下記の通り。(自前のチートシートにメモってる内容)

- `<leader>b`         : GoBuild = `go build`
- `<leader>r`         : GoRun = `go run`
- `<leader>t`         : GoTest = `go test`
- `<leader>tf`        : GoTestFunc = `go test -run ...`
- `<leader>c`         : GoCoverageToggle
- `:GoImport ${name}` : importに追加、tab補完可能
- `:GoDrop ${name}`   : importから削除、tab補完可能
- `:GoImports`        : 不足しているパッケージをimportに追加する
- `dif`               : 関数の中身をdelete
- `vif`               : 関数の中身を選択
- `yif`               : 関数の中身をyank
- `daf`               : 関数の全体をdelete
- `vaf`               : 関数の全体を選択
- `yaf`               : 関数の全体をyank
- `:GoAlternate`      : foo.go と foo_test.goを行き来する
- `:GoDef`            : 定義へ移動
- `:GoDoc`            : ドキュメントを開く
- `:GoDocBrowser`     : ドキュメントをブラウザで開く
- `<leader>i`         : GoInfo = カーソル下の情報を表示
- `:GoRename`         : カーソル下の要素をリネーム

ちなみに、私の設定はこんな感じです。

letg:go_def_mapping_enabled =0letg:go_fmt_autosave =1letg:go_highlight_types =1letg:go_highlight_fields =1letg:go_highlight_functions =1letg:go_highlight_methods =1

vim-instant-markdown

suan/vim-instant-markdown
Markdownのプレビュープラグイン
previmを始めいろんなビューワーを試しましたがこれに落ち着きました。

ファイルの編集を終えるとブラウザのタブを閉じてくれるのが地味に気に入ってます。


EditorConfigで心の健康を保とう

$
0
0

EditorConfigとは

エンジニアの心の健康を保つのに有効なもの。

ざっくり言うと、コードのスタイルを統一するためのエディタ横断プラグイン

.editorconfigというファイルを置けば、記載されたconfigに基づいて文字コードや改行コード、インデントサイズやインデントスタイルを自動で直してくれる優しいやつ。

EditorConfigを利用することで、

  • プロジェクト移動するときエディタの設定いじるのめんどい問題
  • そもそも細かいコード規約までexcelやスプレッドシートで管理するのつらい問題
  • インデントスタイルはtabなのかspaceなのか問題
  • インデントサイズは2つなのか4つなのか問題
  • ファイルごとに改行コードが違う問題
  • コードレビュー時に超どうでもいいこと(行末に無駄なspaceあるよなど)を指摘する時間が勿体無い問題

以上の悲しみに溢れる不毛な争いを根絶できる。

参考リンク(というかこっち見ればこの記事見ないでも良い気もする)

sublime,vimにおけるインストール方法

たまたま身の回りにsublime派とvim派しかいないのでそれぞれのインストール方法を書いておく。

先ほど挙げたqiitaの記事を見れば大体わかると思うが一応補足として。

NeoBundle 'editorconfig/editorconfig-vim'
  • 追記後Vim立ち上げて:NeoBundleInstall

補足:vim使ってるけどneobundleとか全然よくわかんない人用

もう全然わかんないしvimrcなんて書き換えたことないvimmer向け手順

  • neobundleのインストール(mac向け。windowsはごめんなさい)
$ mkdir -p ~/.vim/bundle
$ cd ~/.vim/bundle
$ git clone git://github.com/Shougo/neobundle.vim ~/.vim/bundle/neobundle.vim
  • .vimrcの記述
$ vim ~/.vimrc

以下の内容をペースト(余計なものも入ってるけど気にしないで)

:set clipboard=unnamed
:syntax on
set nocompatible
filetype off            " for NeoBundle

if has('vim_starting')
        set rtp+=$HOME/.vim/bundle/neobundle.vim/
endif
call neobundle#begin(expand('~/.vim/bundle'))
NeoBundleFetch 'Shougo/neobundle.vim'
NeoBundle 'editorconfig/editorconfig-vim'
call neobundle#end()

filetype plugin indent on       " restore filetype
  • bundleのインストール
$ vim
:NeoBundleInstall

.editorconfigファイルの一例

  • このファイルをプロジェクトのリポジトリに置いておけばpullした人のエディタに自動的に適用される
  • 今回はphpしか扱わないプロジェクトに利用したので、php用しか書いてない。
  • 拡張子ごとに設定を記述できるので、jsの場合はindent_size2とかも追記できる。
# This file is for unifying the coding style for different editors and IDEs
# editorconfig.org

# PHP PSR-2 Coding Standards
# http://www.php-fig.org/psr/psr-2/

root = true

[*.php]
charset = utf-8
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
indent_style = space
indent_size = 4

これで世界の平和は保たれた。

やったね!!!!!!!!!!!

uniteからdeniteに移行したメモ

$
0
0

Denite.nvim
https://github.com/Shougo/denite.nvim

Dark powered asynchronous unite all interfaces for Neovim/Vim8

vim用の高機能ファイラーです。
NeoVimかVim8で動作します。

インストール

下記参照
http://yellowho.hatenablog.com/entry/2016/11/11/021346

いろいろ書いてありますが、python3とtypingというのを入れたらうごきました。

$ brew install python3
$ pip3 install --upgrade pip setuptools wheel
$ pip3 install typing

vimで下記実行

:echo has('python3')
=> 1が出ればOK

NeoBundleを使用した場合

下記を追記してインストール

NeoBundle 'Shougo/denite.nvim'

vimで下記実行

:NeoBundleInstall

dainを使用した場合

未検証

設定

Unite.vimを使っていた影響で表示などそちらに寄せてます

.vimrc
nnoremap [denite] <Nop>
nmap <C-c> [denite]"現在開いているファイルのディレクトリ下のファイル一覧。nnoremap<silent> [denite]f :<C-u>DeniteBufferDir
      \ -direction=topleft-cursor-wrap=true filefile:new<CR>"バッファ一覧nnoremap<silent> [denite]b :<C-u>Denite -direction=topleft-cursor-wrap=true buffer<CR>"レジスタ一覧nnoremap<silent> [denite]r :<C-u>Denite -direction=topleft-cursor-wrap=true -buffer-name=registerregister<CR>"最近使用したファイル一覧nnoremap<silent> [denite]m :<C-u>Denite -direction=topleft-cursor-wrap=true file_mru<CR>"ブックマーク一覧nnoremap<silent> [denite]c :<C-u>Denite -direction=topleft-cursor-wrap=true bookmark<CR>"ブックマークに追加nnoremap<silent> [denite]a :<C-u>DeniteBookmarkAdd<CR>".git以下のディレクトリ検索nnoremap<silent> [denite]k :<C-u>Denite -direction=topleft-cursor-wrap=true
      \ -path=`substitute(finddir('.git','./;'),'.git','','g')`
      \ file_rec/git<CR>call denite#custom#source('file','matchers', ['matcher_cpsm','matcher_fuzzy'])call denite#custom#source('buffer','matchers', ['matcher_regexp'])call denite#custom#source('file_mru','matchers', ['matcher_regexp'])call denite#custom#alias('source','file_rec/git','file_rec')call denite#custom#var('file_rec/git','command',
  \ ['git','ls-files','-co','--exclude-standard'])call denite#custom#map('insert','<C-N>','<denite:move_to_next_line>','noremap')call denite#custom#map('insert','<C-P>','<denite:move_to_previous_line>','noremap')call denite#custom#map('insert','<C-W>','<denite:move_up_path>','noremap')

使い方

下記は上記設定にした場合のキーマップです。
.vimrcをいじると自分の好きなキーにマッピングできます。

Ctrl+c f : 開いているファイルのディレクトリにあるファイル一覧
Ctrl+c b : バッファ一覧
Ctrl+c m : 以前開いていたファイル一覧

課題

ctags検索だけやたら遅くていい方法を探し中

gvim(kaoriya版)のquickfixで日本語が文字化けするときの対策

$
0
0

環境設定のたびに忘れて何度も調べたりするのでメモ。

問題

fileencoding=UTF-8, fileformat=unixでファイルを開いているのに、quickfixウインドウは
fileencoding=cp932, fileformat=dosになってしまい、日本語が文字化けする。

対策

\$VIM/switches/catalog/utf-8.vim を、\$VIM/switches/enabled/utf-8.vim にコピーする。

viコマンド(vimコマンド)リファレンス

$
0
0

エディタ (vi)

起動

基本
$ vi ファイル名    ...指定して起動
$ vi ファイル名1 ファイル名2 … ファイル名n    ...複数ファイル起動
$ vi -R ファイル名 or $ view ファイル名   ...読み込み専用で起動

初期表示位置を指定して起動
$ vi + ファイル名    ...最後の行から表示
$ vi +行数 ファイル名    ...指定行から表示
$ vi +/文字列 ファイル名    ...文字列が最初に見つかった場所から表示

その他
$ vi -r ファイル名   ...壊れたファイルをリカバリする

カーソル移動

1文字移動
[←] or [h] or [BackSpace]
[→] or [l] or [Space]
[↑] or [k] or [Ctrl]+[p]
[↓] or [j] or [Ctrl]+[n]

数字指定移動
数字[←] or 数字[h] or 数字[BackSpace]
数字[→] or 数字[l] or 数字[Space]
数字[↑] or 数字[k] or 数字[Ctrl]+[p]
数字[↓] or 数字[j] or 数字[Ctrl]+[n]

行移動
[^]    ...現在行の先頭位置へ
[$]    ...現在行の末端位置へ
[G]    ...最終行の先頭位置へ
[-]    ...前行の先頭位置へ
[Enter]    ...次行の先頭位置へ
:数字    ...指定行へ

移動
[w]    ...1語次へ
[b]    ...1語前へ
[e]    ...単語末尾へ

画面スクロール

画面移動
[H]    ...画面先頭へ(H: Header の意味)
[M]    ...画面中央へ(M: Midle の意味)
[L]    ...画面最終行へ(L: Lower の意味)

1画面分
[Ctrl]+[f]          … (f: Foward の意味)
[Ctrl]+[b]          … (b: Back の意味)

半画面分
[Ctrl]+[d]          … (d: Down の意味)
[Ctrl]+[u]          … (u: Up の意味)

終了

終了
:q    ...書込みを行わず終了(quit の意味)
:q!    ...書込みを行わず強制終了
:wq    ...書込み後終了
:wq!    ...書込み後強制終了

ファイル操作

書込み (上書き)
:w    ...書込み保存(w: write の意味)
:w!    ...強制書込み
:w ファイル名    ...別名で書込み
:w! ファイル名     ...別名で強制書込み
:数字,数字 w     ...n行目からn行目までを保存

複数ファイルを編集中に
:n    ...次のファイルの編集に移る(n: next の意味)
:n!   ...次のファイルの編集に強制的に移る
:rew    ...先頭のファイルに移る
:arg    ...現在何番目のファイルを編集中かを確認
:args    ...編集中ファイルの一覧を確認
:rewind   ..現在のファイルの変更内容を保存して、リストの最初から編集をやり直す
:rewind!    ...現在のファイルの変更内容を保存しないで、リストの最初から編集をやり直す
:e#   ...直前の編集ファイルに戻る

読み込み
:e     ...現在開いているファイルを再度読込み(e: edit の意味)
:e!     ...現在開いているファイルを再度強制読込み
:e ファイル名    ...ファイルを編集用に読込み
:e! ファイル名    ...ファイルを編集用に強制読込み

編集

開始
[a]   ...カーソルの右から入力開始(a: Add の意味)
[A]   ...行末から入力開始
[i]   ...カーソルの左から入力開始(i: Insert の意味)
[I]   ...行頭から入力開始
[o]   ...現在の行の下に1行挿入し、その行頭から入力開始
[O]   ...現在の行の上に1行挿入し、その行頭から入力開始
*入力モードに入る前に入力済みの文字が挿入される

挿入
:r    ...現在行の直下に現在のファイルの内容を挿入(r: read の意味)
:r ファイル名    ...現在行の直下に別ファイルの内容を挿入
:r! コマンド    ...現在位置の直後にシェルコマンドの結果を挿入(ex: !!hogehoge)

削除

削除
[x]   ...カーソルの文字を1文字削除
数字[x]   ...カーソルから後ろに指定数分削除
[X]   ...カーソル直前の文字を1文字削除
数字[X]   ...カーソル直前の文字を指定数分削除

行削除
[D]   ...カーソルから行の終端までの文字を削除
[d$]    ...カーソルから行の最後までを削除
[d^]    ...カーソルから行の先頭までを削除
[dd]    ...カーソルの行を1行削除
数字[dd]    ...カーソルの行をn行削除

:行番号[d]   ...指定行削除
:開始行,終了行[d]   ...指定範囲行削除
:g/文字列/d    ...指定文字列のある行を全て削除

ワード削除
[dw]    ...1ワード削除(ワード:前後を空白かTABに挟まれた文字列)
数字[dw]    ...指定ワードを削除
[de]    ...1ワード削除(dwと異なる点は区切り文字(空白 or TAB)を削除しない)
数字[de]    ...指定ワードを削除
[df文字列    ...カーソルから最初に見つかった指定文字列までを削除

コピー&ペースト

行コピー
[yy]    ...カーソル位置の現在行をコピー
行数[yy]    ...カーソル位置の現在行から指定行数分をコピー

ワードコピー
[yw]    ...カーソル位置から1ワード分コピー
数字[yw]    ...カーソル位置から指定ワード分コピー

その他コピー
[yl]    ...1文字分コピー
[y0]    ...カーソル位置から行頭までコピー
[y$]    ...カーソル位置から行末までコピー

ペースト
[p]    ...コピーした内容をカーソルの後にペースト
[P]    ...コピーした内容をカーソルの前にペースト

検索

[/]文字列    ...カーソルの後方に検索を行う
[?]文字列    ...カーソルの前方に検索を行う
[n]文字列    ...次の検索該当文字列へ([/]→後方に [?]→前方に)
[N]文字列    ...前の検索該当文字列へ

置換

1文字だけ
[r]文字     ...カーソルの文字を1文字だけ違う文字に変更(r: Replace の意味)
数字[r]文字    ...カーソルから指定文字分を違う文字に変更
[R]    ...カーソルのからESCを押すまでの文字を上書き更新

ワード(c系)
[cw]    ...カーソルから1ワード分をESCを押すまで入力した文字に置換
数字[cw]    ...カーソルから指定ワード数分をESCを押すまで入力した文字に置換
[ce]    ...カーソルから1ワード分をESCを押すまで入力した文字に置換(区切り文字を置換しない)
数字[ce]    ...カーソルから指定ワード数分をESCを押すまで入力した文字に置換
[cf]文字列    ...カーソルから最初に見つかった指定文字列までをESCを押すまで入力した文字に置換
[C]      ...カーソルから行の最後までをESCを押すまで入力した文字に置換

指定(s系)
[s]    ...カーソルの文字をESCを押すまで入力した文字に置換
数字[s]    ...カーソルから指定文字数分をESCを押すまで入力した文字に置換
[S]    ...カーソルから行の最後までをESCを押すまで入力した文字に置換
:s/文字列1/文字列2/    ...カーソル行で最初の「文字列1」のみを「文字列2」に置換する(s: Substitute の意味)
:s/文字列1/文字列2/g    ...カーソル行の「文字列1」を全て「文字列2」に置換する(g: Global の意味)
:s/文字列1/文字列2/c    ...カーソル行で最初の「文字列1」を「文字列2」に置換する前に確認が入る(c: Cheange の意味)
:行数s/文字列1/文字列2/    ...指定行で最初の「文字列1」のみを「文字列2」に置換する
:行数s/文字列1/文字列2/g    ...指定行で「文字列1」を全て「文字列2」に置換する
:%s/文字列1/文字列2/g    ...全ての行で「文字列1」を全て「文字列2」に置換する
:開始行,終了行s/文字列1/文字列2/    ...指定範囲行内で各行の最初の「文字列1」を「文字列2」に置換する
:開始行,終了行s/文字列1/文字列2/g     ...指定範囲行内の「文字列1」を全て「文字列2」に置換する
:開始行,$s/文字列1/文字列2/g     ...指定開始行から最終行までの「文字列1」を全て「文字列2」に置換する
:&, &   ...直前のsコマンドの繰り返し

小文字、大文字
~      ...カーソル行の大文字⇔小文字を置換 (置換完了のESCは不要)
数字~    ...カーソルから指定文字分の大文字⇔小文字を置換 (置換完了のESCは不要)

結合(改行をスペースに置換)
[J]   ...現在行と直下の行を結合する
数字[J]   ...現在行から指定行数下を結合する

取り消し

[u]    ...直前の操作をやめる(u: Undo の意味)
[U]    ...行全体に操作を取りやめる
[.]   ...直前の変更操作の繰り返し
Ctrl-[R]    ...取り消しの取り消し

ウインドウ操作

:sp ファイル名   ...ウインドウを横に分割
:vs ファイル名   ...ウインドウを縦に分割
:q,:only    ...カーソルのあるウインドウ以外を全部閉じる
:new    ...空の横ウインドウを開く
:vnew   ...空の縦ウインドウを開く
Ctrl-w w    ...次のウインドウに移動
Ctrl-w p    ...前のウインドウに移動
Ctrl-w o    ...現在のウインドウ以外を閉じる

バッファ

:ls   ...バッファリストの表示
:b    ...バッファ   バッファを表示
:bn   ...次のバッファを表示
:bp   ...前のバッファを表示

その他

:set nu   ...行番号を表示する
:set nonu   ...行番号の表示をやめる
:set showmode   ...現在のモードを表示する
:set showmatch    ...()や{}の対応の報告をするようになる
:set ignorecase   ...大文字/小文字の区別なく検索する
:set autoindent   ...自動インデントモード
:set noautoindent   ...自動インデントモードをやめる
:set all      ...すべてのオプションを表示する
:set ruler     ...ルーラー(右下に表示される行・列の番号)を表示する
:set tabstop=数値     ...タブの大きさを半角スペース数で指定
:set nowrap         ...折り返し表示しない
:set history=数値     ...コマンド履歴の保存数
:set backup       ...ファイルを保存する時にバックアップファイルを作成する
:set nobackup       ...バックアップファイルを作成しない
:syntax on,off    ...カラー表示のオンオフ
:Tutorial   ...30分程度のVi利用方法のチュートリアル
:vert diffsplit ファイル名   ...今のファイルと、他のファイルとの差分を取るコマンド

いまさら聞けないVim Tips(インデント編)

$
0
0

ソースコードのインデント

単一行

インデントしたい行で ==

バッファ全体に適用

ggVG=

gg: バッファの1行目に移動
V: 行選択モードに入る
G: バッファの最終行に移動
=: オートインデント

インデント幅の調整

4カラムインデント

sample
setts=4sts=4sw=4

2カラムインデント

sample
setts=2sts=2sw=2

ts: tabstop
sts: softtabstop
sw: shiftwidth

インデントをタブではなくスペースにする

sample
setet

et: expandtab、タブをスペースに展開する

ファイルタイプ毎にインデント幅を設定する

拡張子毎にファイルタイプを判別できるようにする

以下を.vimrcや.vimrc.localに書く

.vimrc
" あまりメジャーではない拡張子の場合、プレーンなvimではファイルタイプを判別してくれない" *.coffeeをcoffeescriptと判別させる
autocmd BufRead,BufNewFile,BufReadPre *.coffee setfiletype=coffee

インデント幅の指定

.vimrc
" ファイルタイプに対して、インデント幅を指定
autocmd FileType coffee setlocalts=2sts=2sw=2et

【簡単3ステップ】vimでコメントアウト行のみを削除する

$
0
0

はじめに

OSSとかインストールするとコンフィグがコメントアウト行ばかりで見にくかったりする。
もっと、スマートな方法はあるかもだけどとりあえずこれで解決できる。

[ステップ1]「# 」から始まる全ての行を空行に変換

:%s/# .*//g

[ステップ2]「#」から始まる全ての行を空行に変換

:%s/#.*//g

[ステップ3]残った全ての空行(改行のみの行)を削除

:v/\S/d

VIMで置換するときのsコマンドの使い方メモ

$
0
0

sコマンドを使うと、vim内でsedと同じことができる。


:s/before/after/
  • 現在カーソルがある行の一番はじめに出てくるbeforeをafterに置換


:s/before/after/g
  • 現在カーソルがある行の全てのbeforeをafterに置換


:1s/before/after/
  • 現在開いているファイル1行目の一番はじめに出てくるbeforeをafterに置換


:1s/before/after/g
  • 現在開いているファイル1行目に出てくる全てのbeforeをafterに置換


:1,10s/before/after/g
  • 現在開いているファイル1〜10行目に出てくる全てのbeforeをafterに置換


:%s/before/after/
  • 現在開いているファイルの各行の一番はじめに出てくるbeforeをafterに置換


:%s/before/after/g
  • 現在開いているファイルに出てくる全てのbeforeをafterに置換


:%s/before/after/gc
  • c をつけると、確認(yes/no)が出るようになります。


:1,10s#before#after#gc
  • "/"は別の文字でも可能。オススメは "#" (見易いので。また、/を\でエスケープしなくてよくなる)。


:%s#a\|b#c#g
  • aまたはbを、cに置換する。
    • BREの (sedやgrepと同じ) 正規表現になる。
    • | はor条件を表す。
    • \ で | をメタ文字にする(エスケープする)。


:%s#\va|b#c#g
  • aまたはbを、cに置換する
    • \vでEREの (grep -e、egrep、awk、perlと同じ) 正規表現になる。


:%s#\v(a|b)#\1c#g
  • aまたはbを、acまたはbcに置換する
    • \1は ( ) にマッチしたパターン文字列になる
      • oniguruma の$1と同じ

vim初心者が覚えたことリスト

$
0
0

カーソル移動

  • 四方移動
    • [n]h,j,k,l
  • 折り返しの上下移動
    • [n]gj,gk
  • 画面上の最上に移動
    • H
  • 画面上の最下に移動
    • L
  • 画面上の真ん中に移動
    • M
  • n%の位置に移動
    • n%
  • 次の単語
    • [n]w
  • 前の単語
    • [n]b
  • 次の単語の末尾に移動
    • [n]e
  • 前の単語の末尾に移動
    • [n]ge
  • 次の単語 スペース区切り
    • [n]W
  • 前の単語 スペース区切り
    • [n]B
  • 次の単語の末尾に移動 スペース区切り
    • [n]E
  • 前の単語の末尾に移動 スペース区切り
    • [n]gE
  • 行頭に移動
    • 0
  • 行末に移動
    • $
  • 空白でない行頭に移動
    • ^
  • 折り返しの移動
    • g0
    • g$
    • g^
  • 上の行頭の非空白文字に移動
    • [n]-
  • 下の行頭の非空白文字に移動
    • [n]<CR>,+
  • 行の中央に移動に移動
    • gm
  • 一行目に移動
    • gg
  • 最後の行に移動
    • G
  • n行目に移動
    • [n]G
  • 対応する括弧に移動
    • %
  • 編集した場所の一覧
    • :changes
  • 前回編集した場所に戻る
    • [n]g;
  • 前回編集した場所に進む
    • [n]g,
  • 行上の指定した文字に対しての操作
    • [n][d,y,c][f,t,F,T][a-Z,0-9,記号群]
    • [n]:数
    • [d,y,c]:オペレータ
    • [f,t,F,T]:
      • fは前方に探し移動
      • Fは後方に探し移動
      • tは前方に探し直前の文字に移動
      • Tは後方に探し直前の文字に移動
    • [a-Z,0-9,記号群]:探す文字
    • 次の一致に移動
      • ;
    • 前の一致に移動
      • ,
    • 探す文字が日本語の場合
      • <C-k>a5
      • <C-k>A6
      • <C-k>n5
      • <C-k>ta
      • <C-k>Se
      • <C-k>tU
      • <C-k>yA

マーク

  • 現在のカーソル位置をaにマーク
    • m[a-Z]
  • aにマークした行の頭に移動
    • '[a-Z]
  • aにマークした行列に移動
    • `[a-Z]
  • ジャンプリストを変更しない移動
    • g'[a-Z]
    • g`[a-Z]
  • マークの一覧
    • :marks
  • マークの削除
    • :delmarks[a-Z]
  • マークの全削除
    • :delmarks!
  • マークの種類
    • 0~9 過去に閉じたファイルのその時点でのカーソル位置
    • " カレントバッファを前回閉じた際のカーソル位置
    • [ カレントバッファで直前に変更またはヤンクしたテキストの先頭
    • ] カレントバッファで直前に変更またはヤンクしたテキストの末尾
    • ^ カレントバッファでの直前のインサートモード終了位置
    • . カレントバッファでの最後に変更した位置
    • < 直前にビジュアルモードで選択したテキストの先頭
    • > 直前にビジュアルモードで選択したテキストの末尾
  • 前の位置に戻る
    • [n]<C-o>
  • 進む
    • [n]<C-i>
  • ジャンプリストを表示
    • :ju(mps)
  • このファイルで最後に変更した場所に移動
    • '., `.

ページ移動

  • ページを現在行が中央になるように移動
    • zz,z.
  • ページを現在行が最上になるように移動
    • z<CR>,zt
  • ページを現在行が最下になるように移動
    • z-,zb
  • 次のページ
    • <C-f>
  • 前のページ
    • <C-b>
  • 半ページ次
    • <C-d>
  • 半ページ前
    • <C-u>
  • 画面を一行下に移動
    • <C-e>
  • 画面を一行上に移動
    • <C-y>

カット&ヤンク&ペースト

  • 行削除
    • [n]dd
  • カーソル位置から行頭まで削除
    • d0
  • カーソル位置から行末まで削除
    • d$
  • カーソル位置から最初まで削除
    • dgg
  • カーソル位置から最後まで削除
    • dG
  • 文字削除
    • [n]x,dl
  • 文字削除(カーソルの左)
    • [n]X
  • 単語削除
    • dw db de da" di( ...
    • dab daB dap
  • 範囲削除(7行目から20行目まで削除)
    • :7,20d
  • ヤンク(カットと同じ)
    • yl yy yw y$ y0 3yy :4,89y
  • 次に貼り付け
    • [n]p
  • 前に貼り付け
    • [n]P
  • 次に貼り付けてカーソルを移動
    • [n]gp
  • 前に貼り付けてカーソルを移動
    • [n]gP
  • インデントを合わせて次に貼り付け
    • [n]]p
  • インデントを合わせて前に貼り付け
    • [n][p
  • レジスタ履歴
    • :reg
  • 共有
    • ""p
  • ヤンク専用
    • "0p
  • デリート専用
    • "1p
  • 直近の検索語を貼り付け
    • "/p
  • 編集中ファイル名を貼り付け
    • "%p
  • 直近のコマンド
    • ":p
  • クリップボード
    • "+ +レジスタに入っているデータを外で貼り付けできる
    • "* 外でコピーしたデータの格納場所
  • コマンドモード,インサートモード時の貼り付け
    • ヤンクした文字列
      • <C-r>0
    • 外でコピーしてきた文字列
      • <C-r>*
    • 最前の検索語
      • <C-r>/

visualモード

  • 領域選択
    • v
  • 領域選択 行
    • V
  • 領域選択 矩形
    • <C-v>,<C-q>
  • 直前の選択範囲を再選択
    • gv
  • 始点変更
    • o
  • 文字置換
    • r[a-Z,0-9,記号群]
  • 行頭に追記 矩形選択
    • I
  • 行末に追記 矩形選択
    • A
  • パラグラフ選択
    • ip
  • 小文字にする
    • u
  • 大文字にする
    • U
  • 大文字、小文字反転
    • ~

インサートモード

  • インサートモード
    • [n]i
  • 非空白文字の行頭にインサートモード
    • [n]I
  • 行頭にインサートモード
    • [n]gI
  • 次の桁でインサートモード
    • [n]a
  • 行末にインサートモード
    • [n]A
  • 下の行にインサートモード
    • [n]o
  • 上の行にインサートモード
    • [n]O
  • 一文字消してインサートモード
    • [n]s,[n]cl
  • 一行消してインサートモード
    • [n]S,[n]cc
  • 単語消してインサートモード
    • cw ci( ca" cB ...
  • カーソル位置から行末まで削除してインサートモード
    • C c$
  • 直前の挿入箇所でインサートモード
    • gi

インサートモード時の操作

  • インサートモードからノーマルモード
    • <ESC>,<C-[>,<C-c>
  • 一度だけコマンドを実行
    • <C-o>{cmd}
  • インデントを一つ下げる
    • <C-d>
  • インデントを一つ上げる
    • <C-t>
    • <tab>
  • backspce
    • <C-h>
  • 前の単語削除
    • <C-w>
  • カーソル位置から行頭まで削除
    • <C-u>
  • ヤンクした文字列
    • <C-r>0
  • 外でコピーしてきた文字列
    • <C-r>*
  • 最前の検索語
    • <C-r>/
  • 直前に挿入した文字列を挿入
    • <C-a>
  • 直前に挿入した文字列を挿入してノーマルモード
    • <C-@>
  • 計算を入力
    • <C-r>=20*20+20
    • 420
  • ファイル名を入力
    • <C-r>=argv()
    • vim.txt
  • 前の行列の複製
    • <C-y>
  • ダイグラフ
    • <C-k>a5
    • <C-k>A6
    • <C-k>te
    • <C-k>Te
    • <C-k>n5
    • <C-k>SE§
    • <C-k>PI
  • (挿入)スクロール
    • C-x C-e
    • C-x C-y
  • 補完
    • C-nで次
    • C-pで前
    • C-eで中止
    • C-y,Space,Returnで決定
    • キーワード補完(前方)
      • <C-n>
    • キーワード補完(後方)
      • <C-p>
    • 局所キーワード補完
      • C-x C-n
      • C-x C-p
    • ファイル名補完
      • C-x C-f
    • パスパターン補完
      • C-x C-i
    • 行(全体)補完
      • C-x C-l
    • 綴り修正候補
      • C-x s
      • set spell
      • `set spelllang=en,cjk

置換モード

  • 一文字置換
    • [n]r
    • [n]gr(仮想)
  • 全て置換
    • [n]R
    • [n]gR(仮想)
  • 例(0123456789
    • 置換(文字数)
    • 0123456789
    • 仮想置換(文字幅)
    • 0126789

ファイル

  • ファイルを開く
    • :e(dit) {file}
    • :e +23 {file}開始位置が23行目
    • :enew
  • ファイルエクスプローラを開く
    • :e .
    • :browse e
      • -一つ上のディレクトリに移動
      • c現在のディレクトリをカレントディレクトリとする
      • i詳細を表示
      • s詳細表示時にソート
  • ウィンドウを水平分割してファイルエクスプローラを開く
    • :Sex
  • change directory
    • :cd
  • 編集中バッファのみカレントディレクトリを変える
    • :lcd
  • カーソル位置にある単語をファイル名と見なして開く
    • gf
  • 階層位置
    • :pwd
  • バッファの移動
    • :b[n]
  • 次のバッファへ
    • :bn
  • 前のバッファへ
    • :bp
  • 直前のバッファへ
    • :b#,<C-^>,bb
  • 編集中のバッファ一覧
    • :buffers
    • :ls
  • バッファ削除
    • :bd(elete)[n]
    • :bd![n]強制削除
  • 既に開いているバッファを開く
    • :b {file}
  • 全バッファに対してコマンドを実行
    • :bufdo %s/function/func/
  • 1行目から20行目までを{file}に書き込み
    • :1,20 w {file}
  • 1行目から20行目までを{file}に追記
    • :1,20 w>> {file}
  • {file}の内容を現在行に挿入
    • :[n]r {file}
  • コマンドの実行結果を挿入
    • :r!{command}
  • 複数ファイルの操作
    • ファイルを指定
      • :ar(gs) {file1} {file2} {file3}
      • :ar dir1/dir2/dir3/dir4/dir5/*
      • :ar `find . -name \*.txt`
      • :ar **/*.txt
    • 指定ファイルの確認
      • :ar(gs)
    • ファイルの追加
      • :argadd
    • 実行
      • :argdo %s/function/func/g
    • 保存
      • :argdo update
    • 実行保存
      • :argdo %s/function/func/g | update

ウィンドウ

  • ウィンドウを横に分割
    • :sp(lit)
  • ウィンドウを横に分割(読み取り専用)
    • :sview {file}
  • ウィンドウを縦に分割
    • :vs(plit),<C-w>v
    • :vs {file}
  • 新規ファイル 水平
    • :new
  • 新規ファイル 垂直
    • :vnew
  • すべてを閉じる
    • :wqa
    • :qa
  • 閉じる
    • :close,<C-w>q,:hide
  • 現在ウィンドウ以外閉じる
    • :on(ly),<C-w>o
  • ウィンドウ間を移動
    • <C-w>[j,k,h,l]
  • ウィンドウの位置を入れ替え
    • <C-w>[J,K,H,L]
  • 次のウィンドウ
    • <C-w>w
  • 前のウィンドウ
    • <C-w>p
  • 高さ調整
    • <C-w>-
    • <C-w>+
  • 幅調整
    • <C-w><現ウィンドウの幅を縮める
    • <C-w>>現ウィンドウの幅を広める
  • 大きさを等しくする
    • <C-=>
  • 全ウィンドウに対してコマンドを実行する
    • :windo

タブ

  • タブ追加
    • :tabnew
    • :tabe(dit) {file}
    • :tabe +33 {file}
  • 既存のファイルを開く
    • :tabf(ind) {file}
  • タブ閉じる
    • :tabc(lose)
  • 現在タブ以外閉じる(バッファは閉じない)
    • :tabo(nly)
  • 次のタブ
    • gt
    • :tabn(ext)[n]
  • 前のタブ
    • gT
    • :tabp(revious)
    • :tabN(ext)
  • 最初のタブに移動
    • :tabfirst
    • :tabr(ewind)
  • 最後のタブに移動
    • :tabl(ast)
  • タブの一覧
    • :tabs
  • タブの順番を変える
    • :tabm(ove)[n]
  • 全てのタブで実行
    • :tabdo

検索

  • .vimrcに下記を記入していると全検索になる
    • set wrapscan
  • インクリメンタルサーチ
    • set incsearch
  • 下方向に文字列を検索
    • /<文字列> (インクリメンタルサーチ)
    • :/<文字列>
  • 上方向に文字列を検索 wrapscanをonにしていると使わない
    • ?<文字列> (インクリメンタルサーチ)
    • :?<文字列>
  • 最前の検索結果
    • // (インクリメンタルサーチ)
    • ://
  • カーソル上の単語と同じ単語に下方向に移動
    • *, g*
  • カーソル上の単語と同じ単語に上方向に移動
    • #, g#
  • 次へ
    • n
  • 前へ
    • N
  • vimgrep grep
    • :vim(grep) {pattern} {file}
    • 次へ :cn(ext)
    • 前へ :cN(ext),:cp(revious)
    • ワイルドカード
      • ?一つの文字
      • *全て
      • **全て 再帰的にディレクトリに入る
      • [abc] a,b,cのどれか
    • {pattern}
      • /{pattern}/j検索後に移動しない
      • /{pattern}/g一行に複数ある場合は全て表示(重複する)
    • {file}
      • % :カレントバッファ
      • * :カレントディレクトリにあるファイル
      • ** :カレントディレクトリ以下の全てのファイル
      • dir/** :dir以下の全てのファイル
      • dir/* :dirからひとつ下の階層にある全てのファイル
      • dir/**/*.txt
      • dir/**/a*.txt
  • Quickfixウィンドウ
    • :cw(indow)
    • :ccl閉じる
    • :vim {pattern} {file} | cw
    • .vimrcに下記を追記すると検索後に:cwを実行しなくともQuickFixを表示
     augroup QuickFixCmd
       autocmd!
       autocmd QuickFixCmdPost *grep* cwindow
     augroup END
  • QuickFixWindow上の操作
    • :cdo %s/function/func/ | update

参考ページvimgrepとQuickfix知らないVimmerはちょっとこっち来い

折りたたみ

折り畳みの設定
set foldmethod=marker foldmarker=>->,<-<
折り畳み時のマーカーをコメントする際に使う記号の設定
set commentstring=\ %s
autocmd FileType python set commentstring=\ #%s
autocmd FileType html set commentstring=\ <!--\ %s\ -->
autocmd FileType sh set commentstring=\ #%s
autocmd FileType vim set commentstring=\ \"%s

  • 折り畳みの有無効の切り替え
    • zi
  • 折り畳みの作成
    • [n]zf
  • 折り畳みの削除
    • zd
  • 再帰的に削除
    • zD
  • 全削除
    • zE
  • 折り畳みの開閉
    • za
  • 折り畳みの再帰的開閉
    • zA
  • 折り畳みを開く
    • zo
  • 折り畳みを再帰的に開く
    • zO
  • 折り畳みを閉じる
    • zc
  • 折り畳みを再帰的に閉じる
    • zC
  • 折り畳みの先頭に移動
    • [z
  • 折り畳みの末尾に移動
    • ]z
  • 一つ下の折り畳みに移動
    • zj
  • 一つ上の折り畳みに移動
    • zk
  • 全ての折りたたみを閉じる
    • zM
  • 全ての折りたたみを開く
    • zR

置換

:%s/<置換元文字列>/<置換後文字列>/gce

  • 区切り文字は任意
  • %はカレントバッファ
  • cは確認
  • gは一行に複数あってもすべて置換
  • eはエラーを表示しない

置換ではないけど
testを含む行を削除
:g/test/d
testを含まない行を削除
:v/test/d

指定範囲をコマンドの標準入力として扱い、標準出力で上書きする
:.!{シェルコマンド}
:3!date
:.!bc 20*30が600で置換される
:.,.+3!nl 4行に行番号がつく
:.-4!sed 's/ //g'

その他

現在の行と下の行を連結
J
間に空白入れる
gJ

undo-tree

edit(1)-----edit(2,4)------edit(3)
                 |
                 -----------edit(5)

操作を元に戻す
u一方向 edit3に行けない
g-ツリー
操作を進める
<C-r>
g+
undoリスト
:undol(ist)
通番を使ってundo
:earlier {n}
:later {n}

ハイライト解除
:noh

右にインデント
[n]>>
左にインデント
[n]<<

直近の変更操作を繰り返す
.

インクリメント
<C-a>
デクリメント
<C-x>

シェルコマンドの結果を挿入する
:.+3r!{シェルコマンド}
標準入力が必要な場合は実行後に入力する
:r!bc
> 20+20*20
> <C-d>
420

コマンド履歴
q:
直前に実行したコマンドを再度実行
@:

マクロ

記録開始
:q[a-Z]
記録終了
q
マクロの実行
@[a-Z]
例)カーソルにある値をコピーして貼り付けてインクリメントの動作を10回行う
i,0,<ESC>,qa,yy,p,<C-a>,q,10@a

ダイフラグ
:dig(raphs)

大文字にするオペレータ
gu
小文字にするオペレータ
gU
反転するオペレータ
g~

バイナリ
:%!xxd

選択モード 使いどころがわからない
gh
gH
g<C-h>

spell

次のスペルミス
]s
前のスペルミス
[s
候補を表示
z=
正しいと登録
zg
誤りと登録
zw

vimscriptでpythonを使う

"def,classの行にmarkを付ける
function! MARK_PYTHON()
python3 << py
import vim
import re
char = 97 #'a'の文字コード
vim.command("execute 'mark' 'a'")
nowRow = vim.current.buffer.mark('a')[0] #現在行番号を得る
for i in range( len(vim.current.buffer) ): #1行目から探索
    vim.command("normal " + str(i) + "G")
    if re.search("def |class ", vim.current.line):
        vim.command("execute 'mark' " + "\'" + \
                    char.to_bytes(1,"big").decode("utf-8") + "\'")
        char+=1
        if char >= 123: #zまで使ったらaに戻る
            char = 97
#コマンドを実行した行に移動
vim.command("normal " + str(nowRow) + "G")
py
endfunction
command! Mark call MARK_PYTHON()

augroup python_conf
    autocmd FileType python call MARK_PYTHON()
augroup END

WSLにVim8を入れてみる

$
0
0

WSL(Ubuntu)に入っているデフォルトのVimはVersion7.4です。
またVimのオプションでLuaが有効になっていないので入力補完のプラグイン(neocomplete.vim)
が使えません。

$ vim --version | grep lua
+dialog_con -lua

というわけで今回はWSLのVimをVim8+luaに置き替えたいと思います。
以下を参考させて頂きました。

https://qiita.com/xxxkurosukexxx/items/49c34bb576a6c1aa241d

Vimを削除

$ sudo apt-get remove --purge vim vim-runtime vim-common

コンパイルに必要なものを入れる

sudo apt-get install gcc-4.9 autoconf automake make lua5.3 luajit liblua5.3-0 liblua5.3-dev libperl5.22 libperl-dev libpython-dev python-dev python3-dev tcl tcl-dev

ソースからコンパイル&インストール

$ cd /usr/local/src/
$ sudo chmod a+w .
$ git clone https://github.com/vim/vim.git
$ cd vim
$ ./configure --with-features=huge \>               --disable-darwin \>               --disable-selinux \>               --enable-fail-if-missing \>               --enable-luainterp \>               --enable-perlinterp=dynamic \>               --enable-pythoninterp \>               --enable-python3interp \>               --enable-tclinterp \>               --enable-cscope \>               --enable-multibyte \>               --enable-xim \>               --enable-fontset \>               --with-compiledby=xxxkurosukexxx \>               --enable-gui=no \>               --prefix=/usr/local

省略

checking for lua... no
checking if lua.h can be found in /usr/include... no
checking if lua.h can be found in /usr/include/lua... no
configure: error: could not configure lua
$

なんか怒られました。
luaがない??

いろいろと探してこれでいけました。
以下ページのJohanTanさんのコメントで行けた気がします。。。
Versionは適時自分の環境のものに読み替えてください。

https://github.com/Shougo/neocomplete.vim/issues/31

こうするとのこと
sudo apt-get install liblua5.1-dev
copy all files from /usr/include/lua5.1/ to /usr/include/lua5.1/include/
sudo ln -s /usr/lib/x86_64-linux-gnu/liblua5.1.so /usr/local/lib/liblua.so
Go to vim source folder:
./configure --with-features=huge --enable-cscope --enable-pythoninterp=yes --with-python-config-dir=/usr/lib/python2.7/config-x86_64-linux-gnu --enable-multibyte --enable-fontset --disable-gui --disable-netbeans --enable-luainterp=yes --with-lua-prefix=/usr/include/lua5.1 --enable-largefile
make
sudo make install

実際の手順

includeフォルダを作成してコピー
/usr/include/lua5.3/include$ ls
lauxlib.h  lua  luaconf.h  lua.h  lua.hpp  lualib.h

シンボリックリンクを張る
$ sudo ln -s /usr/lib/x86_64-linux-gnu/liblua5.3.so /usr/local/lib/liblua.so

コンパイル
$ ./configure --with-features=huge \
>               --disable-darwin \>               --disable-selinux \>               --enable-fail-if-missing \>               --enable-luainterp \>               --with-lua-prefix=/usr/include/lua5.3 \>               --enable-perlinterp=dynamic \>               --enable-pythoninterp \>               --enable-python3interp \>               --enable-tclinterp \>               --enable-cscope \>               --enable-multibyte \>               --enable-xim \>               --enable-fontset \>               --with-compiledby=xxxkurosukexxx \>               --enable-gui=no \>               --prefix=/usr/local
configure: loading cache auto/config.cache
checking whether make sets $(MAKE)... yes
checking for gcc... gcc
checking whether the C compiler works... yes
省略
checking whether we need -D_FORTIFY_SOURCE=1... yes
checking linker --as-needed support... yes
configure: updating cache auto/config.cache
configure: creating auto/config.status
config.status: creating auto/config.mk
config.status: creating auto/config.h

makeします。
$ make
Starting make in the src directory.
If there are problems, cd to the src directory and run make there
cd src && make first
make[1]: Entering directory '/usr/local/src/vim/src'
/bin/sh install-sh -c -d objects
touch objects/.dirstamp
省略
cd xxd; CC="gcc" CFLAGS=" -g -O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1" LDFLAGS="-Wl,-E   -L/usr/local/lib -Wl,--as-needed" \
        make -f Makefile
make[2]: Entering directory '/usr/local/src/vim/src/xxd'
gcc  -g -O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1 -Wl,-E   -L/usr/local/lib -Wl,--as-needed -DUNIX -o xxd xxd.c
make[2]: Leaving directory '/usr/local/src/vim/src/xxd'
make[1]: Leaving directory '/usr/local/src/vim/src'

install
$ sudo make install
Starting make in the src directory.
If there are problems, cd to the src directory and run make there
cd src && make install
make[1]: Entering directory '/usr/local/src/vim/src'
省略
if test -d /usr/local/share/applications -a -w /usr/local/share/applications; then \
   cp ../runtime/vim.desktop \
        ../runtime/gvim.desktop \
        /usr/local/share/applications; \
   if test -z "" -a -x ""; then \
       -q /usr/local/share/applications; \
   fi \
fi
make[1]: Leaving directory '/usr/local/src/vim/src'

入りましたー

キャプチャ.PNG

$ vim --version | grep lua
+cursorshape       +lua

dein.vimを入れる

最後にプラグイン管理ツールを入れます。
NeoBundleではなく後継のdein.vimを入れました。

https://github.com/Shougo/dein.vim

手順は公式ページに従いました。

$ curl https://raw.githubusercontent.com/Shougo/dein.vim/master/bin/installer.sh > installer.sh
$ sh ./installer.sh .vim/bundle/dein

vimrcに以下のように記載しました。
tomlファイルはまだうまく使えていないです。。。

if &compatible
  set nocompatible
endif
set runtimepath+=/home/satou/.vim/bundle/dein/repos/github.com/Shougo/dein.vim

let s:dein_dir = expand('~/.vim/bundle/dein')

if dein#load_state(s:dein_dir)
  call dein#begin(s:dein_dir)

  call dein#add('Shougo/deoplete.nvim')
  if !has('nvim')
        call dein#add('roxma/nvim-yarp')
        call dein#add('roxma/vim-hug-neovim-rpc')
  endif
  call dein#add('tomasr/molokai')


  call dein#end()
  call dein#save_state()
endif

if dein#check_install()
  call dein#install()
endif

俺たちのVimはこれからだ!ご愛読ありがとうございました。
次回のVimの記事にご期待ください。

参考

http://vim-jp.org/docs/build_linux.html
http://www.jonki.net/entry/2014/05/04/183250

nvimでのpython3_host_progをwhich python3で定義する

$
0
0

pythonのpathが違う環境でも同じinit.vimを使いたいので

let g:python3_host_prog = substitute(system('which python3'),"\n","","")

Vim 練習問題 中級 | 複数行をコメントアウトする

$
0
0

テキスト

I
AM
THE
GOOD
VIMMER

スタート

echo "I\nAM\nTHE\nGOOD\nVIMMER" > study.txt && vim study.txt

練習A

1行目から2行目を同時にコメントアウトせよ。

コマンド

  1. Control + v
  2. j
  3. Shift + i
  4. #
  5. esc
  6. esc

( 終わったら uで元に戻す )

結果

#I#AM
THE
GOOD
VIMMER

ステップ

連続して3回繰り返せ。 (自分の決めた回数でも良い)

ステップ

30秒以内に、連続して3回繰り返せ。 (自分の決めた秒数、回数でも良い)

練習B

全ての行を同時にコメントアウトせよ。

  1. Control + v
  2. Control + d
  3. Shift + i
  4. #
  5. esc
  6. esc

結果

#I#AM#THE#GOOD#VIMMER

ステップ

連続して3回繰り返せ。 (自分の決めた回数でも良い)

ステップ

30秒以内に、連続して3回繰り返せ。 (自分の決めた秒数、回数でも良い)

練習C

練習Aと練習Bを順番におこなえ。 (逆順でも良い)

ステップ

  • 練習A
  • 練習B
  • 練習A

の順番で、あわせて30秒以内におこなえ。 (自分の決めた順番、秒数でも良い)

参考

Vimで余分な行末の空白と最終行の空行の削除を自動で行う

$
0
0

概要

コードに限らず行末の空白、最終行の空行は無駄であるが、一つ一つ消すのも面倒なので自動化した。

行末の空白を消す

Vimの正規表現を使う

%s/\s\+$//ge

行末から空白が一つ以上続いているものを置換して削除しています。

最終行の空白を削除する

while文とgetline()を使って行います。

while getline('$') == ""
    $delete _
endwhile

空行が何行続いても削除できるようにwhile文で回しています。

纏め

vimrcに次のように加えました。

.vimrc
autocmd BufWritePre * call s:remove_unnecessary_space()

function! s:remove_unnecessary_space()
    " delete last spaces
    %s/\s\+$//ge

    " delete last blank lines
    while getline('$') == ""
            $delete _
    endwhile
endfunction

新たに関数を定義して、それをファイル書き込み前に実行しています。

参考

Vimで行末の余分なスペースを取り除く
vimで最終行が空行だったら保存時に最終行を削除する方法

名無しのvim使い

WSL(旧Bash on Ubuntu)上のVimからその時の作業ディレクトリでエクスプローラーを開く

$
0
0

Windows Subsystem for Linuxは非常に便利ですよね。
Windowsで手軽にLinux環境を使えるので重宝しています。

特にVim(neovim)の挙動がほぼ完璧なところが個人的な一番の推しポイントです。
WSL上のvimで作業しているときにしばしば起きるのが、vimの現在の作業ディレクトリをエクスプローラーで開きたいということです。

それを実現する設定がこちら

noremape :!explorer.exe `pwd \| sed -e"s@\/mnt\/c\/@C:\\\\\\@" \| sed -e"s@\/@\\\\\\@g"`

これを.vimrcに書くとSpase+eでその時の作業ディレクトリでエクスプローラーが立ち上がります。
vimの文字列とsedのエスケープが合わさってすごい量のバックスラッシュになっていますね…

おまけ

作業ディレクトリでコマンドプロンプトを開く

noremapc :!cmd.exe /cstart cmd.exe

NerdTreeが遅かったので、解消してみた。

$
0
0

概要

を参考にして、環境整えてみたのだが、Nerdtree上での移動が...遅い!遅すぎる!!

原因

特定

今回追加したプラグインに原因があると仮定

'ryanoasis/vim-devicons' 
'tiagofumo/vim-nerdtree-syntax-highlight'

片方だけアンイストールしてみて、NerdTreeの動作を確認してみると...

'tiagofumo/vim-nerdtree-syntax-highlight'

があると遅い!

解決

まず公式ページに解決方法があるか探してみることに

あった!!

.vimrc
let g:NERDTreeLimitedSyntax = 1

を追加すれば、lagは発生しない。


:terminalでファイルを開く

$
0
0

Vim の :terminal の中から外の Vim を操る方法
https://mattn.kaoriya.net/software/vim/20171219121032.htm

に記載されている内容ですが、いくつか躓いたのでメモ

普通に:terminalからvimを起動してファイルを開く

それをすると、別のvimがterminalの中で開いてしまって、vim in vimの状態になる。terminalの中で開くのではなく、親vimで開いてほしい。

vim --remote を使う

:terminal cmd /c vim --remote $HOME

確かに開くけど、開いた後にterminalウィンドウは消えてほしい。

++close を使う

:terminalにはオプションとして++closeがつけられる。これをつけるとジョブが終了したらウィンドウも閉じてくれる。

:terminal ++close cmd /c vim --remote $HOME

が、今回の場合はなぜか閉じてくれない。なぜだろう...

vim --remote-send を使う

この記事の最初に貼り付けたURLに記載の通り --remote-sendを使ってみる。

:terminal cmd /c vim --remote-send ":e $HOME<CR>"

なんかうまくいかない...

一旦 :terminalでターミナルを起動して vim --remote-send ":e $HOME<CR>"と入力してみる

C:\>vim --remote-send ":e $HOME<CR>"

C:\>:e $HOME
C:\>

あぁ、そうかターミナルに文字列が送信されちゃうのか。ということで頭に<C-W>をつける

C:\>vim --remote-send "<C-W>:e $HOME<CR>"

E948: ジョブはまだ実行中です (! を追加でジョブを終了)

言うとおりにつけてみる。

C:\>vim --remote-send "<C-W>:e! $HOME<CR>"

ちゃんと表示した。でも裏にはバッファとして残ってるみたい。:eをやめて:splitにしてみる。

:terminal ++close vim --remote-send "<C-W>:split $HOME<CR>"

ちゃんと表示して、且つ裏にもバッファは残ってない。

上記を踏まえて peco と組み合わせてみる

カレントディレクトリのファイルのみを表示(dir /a-D /b)してpecoに食わせてフィルタリングしたやつをvimで開く

pcd.bat
@echo off
for /f "usebackq delims==" %%i in (`dir /a-D /b ^| peco`) do (
  vim --servername %VIM_SERVERNAME% --remote-send "<C-W>:split %%i<CR>"
  break
)
:terminal ++close pcd.bat

まとめ

  • :terminalからファイルを親vimで開きたいときは--remote-sendを使う。
  • 送信するコマンドの前には<C-W>を置く
  • :e!だと、裏にバッファが残っちゃうので:splitを使う
  • ++closeしてジョブが終了したときにウィンドウも閉じてもらう

brewでvimのアップグレード

$
0
0

pyenvを使っている場合にbrewでvimを8.0.1400_4から8.0.1450に更新する方法です。
やり方は解決方法のところだけ見れば他の章を読まなくても大丈夫です。

今日brewでvimが更新できなかった!

 前にもvimがパイソンのせいで更新できなくて、その時はpyenvのバージョンを「$ pyenv local system」でsystemに変更したら更新できたんですが、今日vimを更新しようとしたら、

==> Upgrading vim
==> Installing dependencies for vim: python
==> Installing vim dependency: python
==> Downloading https://homebrew.bintray.com/bottles/python-2.7.14_2.high_sierra
Already downloaded: /Users/ユーザ名/Library/Caches/Homebrew/python-2.7.14_2.high_sierra.bottle.tar.gz
==> Pouring python-2.7.14_2.high_sierra.bottle.tar.gz
Error: An unexpected error occurred during the brew link step
The formula built, but is not symlinked into /usr/local
Permission denied @ dir_s_mkdir - /usr/local/Frameworks
Error: Permission denied @ dir_s_mkdir - /usr/local/Frameworks

とbrewが勝手にpython2.7をダウンロードしてきてしかもどこかで権限が拒否られてすごすごと失敗しやがりました。
パイソンは元からmacにあるのでbrew版パイソンは完全に容量の無駄遣いで邪魔ですし、このエラーメッセージに従ってbrew link pythonしたり、拒否されたディレクトリの権限を緩めたら依存関係がややこしくなりそうです。なのでこれらの手段を使わずに削除する方法を模索します。

前の解決方法を調べた時に読んだ該当するスタックオーバーフローの質問と回答を見返してみました。

https://ja.stackoverflow.com/questions/23350/homebrew-%E3%81%A7-vim-%E3%81%8C%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84

 この質問ページではpyenvに関する記述をbashrcからコメントアウトしてターミナルを再起動すれば成功したと書いてありますが、一旦、brewでインストールしたいらない方のパイソンを削除しました。
brew uninstall python で削除しようとしたら、

Error: Refusing to uninstall /usr/local/Cellar/python/2.7.14_2
because it is required by vim 8.0.1400_4, vim 8.0.1450, which are currently installed.
You can override this and force removal with:

というエラーメッセージが出たので、
brew uninstall --ignore-dependencies python

と打ち込んで削除してからbashrcをいじる解決法を試しても、前述と同じメッセージが出て失敗しました。

 解決方法

bashrcのpyenvに関する行をコメントアウトした上で、 1
brew unlink python したら、 brew upgrade が成功しでvimが更新されました。
その後、
brew uninstall --ignore-dependencies python
brew cleanup
でいらないbrew版python2.7を削除します。

その他

 結局何故以前成功した方法で今回は失敗したのか、その上で何故今回の方法だと成功したのか、brew doctorを使う前の試行錯誤する段階で成功しちゃったので、よくわからないから結果オーライだけど消化不良という感じです。なので、理由がわかる人がいれば解説お願いします。
この方法だと結局一度brewが勝手にpythonをインストールしようとするのは防げないんです。

後なんとなく英単語とカタカナ使い分けたんですけど英単語に統一したほうがいいですか?
stackoverflow、upgrade,python,comment out,error message等はカタカナの方が自分は読みやすくて、「ブリュー」,「ヴィム」はなんかカタカナだと汚く見えて英語表記の方が自分には綺麗に感じたんです。


  1. 自分はbashrc内を「pyenv」で検索して、該当した行をコメントアウトしただけでできました、他にも関連する行はあったかもしれませんが。 

Vim patchダイジェスト [2018/01]

$
0
0

Vim patchダイジェスト [2018/01]
(8.0.14288.0.1451)

  • 8.0.1451: :four_leaf_clover:$PYTHONHOMEをPython 2.7と3.5で同時に設定できない件を修正しました。'pythonhome''pythonthreehome'を追加しました。
  • 8.0.1450: GTK2: gui_mch_stop_blink()が呼ばれた時に無限ループになることがある件を修正しました。
  • 8.0.1448: :rubyfileで例外が投げられると落ちる件を修正しました。
  • 8.0.1445: :four_leaf_clover: autocmdイベントCmdlineChangedを追加しました。
  • 8.0.1441: :undo 0を使用すると、取り消しがおかしな状態になる件を修正しました。
  • 8.0.1440: vtermの応答が遅延する場合がある件を修正しました。(関連URI: vim-jp/issues/1140)
  • 8.0.1439: cscopeの検索に失敗した時にVimがハングする件を修正しました。
  • 8.0.1436: :four_leaf_clover:動作するPythonのバージョン情報が不十分だったので、has()に "python_compiled", "python3_compiled", "python_dynamic" および "python3_dynamic" を追加しました。
  • 8.0.1432: :copen実行後にquickfix windowのwindow-IDが取得できない件を修正しました。
  • 8.0.1431: Windows: %TMP%%TEMP%&が含まれているとvimtutorが機能しない件を修正しました。
  • 8.0.1429: term_start()の第1引数に空文字を渡すとクラッシュする件を修正しました。(関連patch: 8.0.1430)

凡例

表記意味
:four_leaf_clover:新機能、大幅な仕様変更
'hoge'オプション (:h options参照)
:hogeExコマンド (:h :index参照)
hoge()組み込み関数 (:h functions参照)
v:hogeVim定義済変数 (:h v:参照)
+hogefeature (:h +feature-list参照)

方針

こちらを参照。

viでの編集で、方向キーを押すとAとか入力される

$
0
0

viでの編集で、方向キーを押すとAとか入力される

Raspberry Pi に標準でインストールされているviコマンドでテキストを編集しているとき、方向キー(上下左右)を押すと、AとかBとか入力され、移動してくれない。
なんだか低機能なものがインストールされているらしいので、改めてインストールする。

インストール

$ sudo apt-get install vim

参考

UbuntuのVimがおかしいな、と思ったときの対処法

vimが「dyld: Library not loaded」エラーが出て起動できない(MacOS High Sierra)

$
0
0

最近、家でコード書いてなかったんで気がつかなかったんですが、今日vim使って簡単なサンプルコード書こうと思ったら

$ vi hoge.php
dyld: Library not loaded: /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/libruby.2.0.0.dylib
  Referenced from: /usr/local/bin/vim
  Reason: image not found
Abort trap: 6

起動すらできん。
そんなの見つからねーよ、って怒られてますね

$ ls -al /System/Library/Frameworks/Ruby.framework/Versions/
total 0
drwxr-xr-x  4 root  wheel  128  1 21 14:59 .
drwxr-xr-x  5 root  wheel  160  1 21 14:59 ..
drwxr-xr-x  6 root  wheel  192 12  2 04:40 2.3
lrwxr-xr-x  1 root  wheel    3  1 21 14:53 Current -> 2.3

2.0じゃなくなってますね。そりゃダメだw
最近、High Sierraに上げたからかな?
まぁいい。とりあえずvimが動かないと、ちょっとサンプルコード書くだけでIDEとかだるい。(Atomも入ってるけどvimが好きなんだよ)
ググってみると同じ状況になった人が結構いたみたい。brewで入れたんなら、brew upgradeすりゃいいぜ?ってことだったので

$ brew upgrade vim

してみる。が・・・

Updating Homebrew...
==> Homebrew has enabled anonymous aggregate user behaviour analytics.
Read the analytics documentation (and how to opt-out) here:
  https://docs.brew.sh/Analytics.html

xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun
Error: Failure while executing: git config --local --replace-all homebrew.analyticsmessage true
Error: Your Xcode (8.0) is too outdated.
Please update to Xcode 9.2 (or delete it).
Xcode can be updated from the App Store.

そんなパスねーよ、お前のXcode古すぎだよ。Xcode9.2以上にしろよ(意訳)と言われているので、仕方ない。
ElCapitan時代に入れたのになかったことになってるのか、App Storeのアップデートには出ないので、検索してインストール。
あいかわらず、ダウンロード時間かかりすぎ。

気を取り直して、もう一回。

$ brew upgrade vim
Updating Homebrew...
==> Homebrew has enabled anonymous aggregate user behaviour analytics.
Read the analytics documentation (and how to opt-out) here:
  https://docs.brew.sh/Analytics.html
・・・略・・・
==> Installing vim dependency: perl
xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun
Error: Failure while executing: git config --local --replace-all homebrew.private true

え、アプデしろっていうからしたのに、この仕打ちw
確かにこのパスにそんなんいないけど、Xcode入れろって言ったじゃんねー
コマンドラインツールか・・・
というわけで、Appleからダウンロードしてから、気を取り直してもう一度。

$ brew upgrade vim
==> Upgrading 1 outdated package, with result:
vim 8.0.1450
==> Upgrading vim --with-lua
・・・略・・・
==> Pouring python-2.7.14_2.high_sierra.bottle.tar.gz
Error: An unexpected error occurred during the `brew link` step
The formula built, but is not symlinked into /usr/local
Permission denied @ dir_s_mkdir - /usr/local/Frameworks
Error: Permission denied @ dir_s_mkdir - /usr/local/Frameworks

進んだのも束の間。パーミッションないわい。
この他にもパーミッションがないって怒られている。いや、これ、なんか違う気がする・・・

$ brew update
Already up-to-date.

ふむ。新しいと。

$ brew upgrade
==> Upgrading 2 outdated packages, with result:
vim 8.0.1450, lua 5.3.4_2
==> Upgrading vim --with-lua
==> Installing dependencies for vim: lua
・・・略・・・
==> make
==> make install prefix=/usr/local/Cellar/vim/8.0.1450 STRIP=/usr/bin/true
🍺  /usr/local/Cellar/vim/8.0.1450: 1,427 files, 22.9MB, built in 1 minute 14 seconds

というわけで、vimも無事、使えるようになりましたとさ。
vimだけ指定してupgradeできないときは、他にもhomebrew経由で入ったものが古いとかもあるので、一度brew upgradeしてみるといいかもしれません。

Viewing all 5692 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>