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

vimコマンド

$
0
0

個人的によく使うキーをまとめています
ある程度のキーが自然と使えたらvimも楽しくなりますね
追々vimの設定系も調べて行きます

コマンドモード中

モード切替

キー動作
iカーソル位置からINSERTモードになる
aカーソル位置の1つ後ろからINSERTモードになる
Shift+aカーソル行の末尾からINSERTモードになる
Ctrl+vヴィジュアルモードに切替え

保存・終了

キー動作
w編集内容の保存
qvimを終了する
q!強制的にvimを終了する
wq編集内容を保存してvimを終了

基本動作・移動

キー動作
u戻る。一つ前の状態に戻る
Ctrl+r進む。戻した操作を元に戻す
Shift+gファイルの最後に移動
ggファイルの先頭に移動

コピー・切取り

キー動作
yy行コピー。yyの頭に数字を指定することで複数行コピーとなる
dd行切取り。ddの頭に数字を指定することで複数行削除となる

貼付け

キー動作
pカーソルのある行から1つ下の行に挿入
Shift+pカーソルのある行から1つ上の行に挿入

その他

キー動作
Ctrl+zプログラムを一時停止。jobsコマンドでプログラムの一覧を表示し、fg コマンド(fg [再開プログラム番号])で再開する。

INSERTモード中

モード切替

キー動作
EscINSERTモードから抜け、COMMANDモードになる

Vimで複数行のインデント修正

$
0
0

忘れないようにメモ

shift + vを押して、j or kで範囲を選択
=を押せば自動でインデントが修正される

Vimでペース時コメントアウトを無効化

$
0
0

メモ

" auto comment off
augroup auto_comment_off
    autocmd!
    autocmd BufEnter * setlocal formatoptions-=r
    autocmd BufEnter * setlocal formatoptions-=o
augroup END

上記を.vimrcに記述すれば自動コメントアウトが無効化される

vim メモ

$
0
0

検索

/[検索文字列]

検索ハイライトを消す

:noh

置換

:%s/[置換元]/[置換先]/

行番号表示

:set number

slimvでroswellを使う設定

$
0
0

roswellを使いはじめて、ros runで走る環境とslimvのreplの環境が違うのが気になったのでslimvのreplをroswellのものにしたいと思った。
> ググって出てきた記事を真似するも微妙に上手くいかない(なんで)
>> 色々試す
>>> 上手くいったので共有.

ソース

vimrcに以下を追加しました。

.vimrc
letg:slimv_swank_cmd ="!ros -e '(ql:quickload :swank) (swank:create-server)' wait &"letg:slimv_lisp ='ros run'letg:slimv_impl ='sbcl'

bash(zsh)上でよく使うカーソル移動などのショートカットを覚えると得する話

$
0
0

きっかけ

最近他人のターミナルの画面を見る機会が多くなりまして、よく矢印キーだけでカーソル移動したりする方が多いなぁと感じたりするので、紹介用にまとめました。

また、これらのショートカットを覚えることで他のlinuxコマンドなどでも通用することも多いので、ぜひ覚えておいても損はないのかなと思います。

bash(zsh)に存在するemacsモードとviモード

bash、zshなどのカーソル移動にはemacsモードとviモードが存在します。
これらのモードはカーソル移動におけるショートカットにおいて主に違いがあります。

大抵の場合bashやzshの場合、デフォルトのemacsモードで事足りるかと思うので、今回はbashについてはemacsモードについてまとめます。(viモードについて気になる方は他の方の紹介しているviモードの記事をどうぞ)

emacsモードのカーソル移動

ショートカット意味
Ctrl + aカーソルを行頭に移動
Ctrl + eカーソルを行末に移動
Alt + →単語ブロック毎に右に移動※1
Alt + ←単語ブロック毎に左に移動※1

※1 日本語に対しても使用できますが、基本的に英語に比べると、単語ブロックの判定の精度は落ちます

emacsモードの文字削除

文字削除も便利なショートカットが存在します

ショートカット意味
Ctrl + hカーソル前の文字を削除
Ctrl + dカーソル下の文字を削除
Ctrl + w単語ブロック毎に削除
Ctrl + uカーソルから行頭まで削除
Ctrl + kカーソルから行末まで削除

ちなみに、terminalでパスワードを入力する場面で打ち間違えたときに、Ctrl + uしたりするとパスワードを最初から打ち直したりできます。

Ctrl + w と Ctrl + h はvi(vim)でも使えます。
Ctrl + hは地味ですが、ホームポジション崩したくない人(vimmerとか)がよく使います[要出典]。

また、bash、zshにおいては行に文字が全く無い場合にはCtrl + dはexitと同じコマンドになります。

次候補、前候補

また、コマンドのヒストリーを遡る際の『候補列挙リストの移動』としての Ctrl+n Ctrl+p も同じです。

ショートカット意味
Ctrl + n前のヒストリーの候補へ
Ctrl + p次のヒストリーの候補へ

この候補列挙のショートカットはvimでも補完の候補の列挙リストの移動などで利用します。

mysqlのCLIでも同様なキー操作が可能

これらのキー操作、CLIのmysql操作でも一部同じショートカットをサポートしています。

ショートカット意味
Ctrl + aカーソルを行頭に移動
Ctrl + eカーソルを行末に移動
Alt + →単語ブロック毎に右に移動
Alt + ←単語ブロック毎に左に移動
Ctrl + hカーソル前の文字を削除
Ctrl + dカーソル後の文字を削除
Ctrl + u行を削除
Ctrl + wカーソルから行頭まで削除
Ctrl + kカーソルから行末まで削除
Ctrl + n前のヒストリーへ
Ctrl + p次のヒストリーへ

Ctrl + w と Ctrl + uが若干惜しい感じですが、概ねサポートしています。

また、CLIのmysqlでもCtrl + dのショートカットによるexitをサポートしています。
ほかにも、bash、zshと同じようにCtrl + rによるヒストリー検索もサポートしてますよね。

これらのemacsっぽいショートカットはmacならデフォルトで利用可能

macはこのemacsモードのterminalのカーソル操作に影響を受けているっぽい(それか、emacs自体に影響を受けているか)ので、macではおおよそ同じショートカットが利用できますので覚えておいてきっと損はありません。

ショートカット意味
Ctrl + aカーソルを行頭に移動
Ctrl + eカーソルを行末に移動
Alt + →単語ブロック毎に右に移動
Alt + ←単語ブロック毎に左に移動
Ctrl + hカーソル前の文字を削除
Ctrl + dカーソル後の文字を削除
Ctrl + kカーソルから行末まで削除
Ctrl + n次の候補へ (※変換中)
Ctrl + p前の候補へ(※変換中)

※Ctrl-uとCtrl-wがダメっぽいです

一部対応していないキーがありますが、概ね対応しているのではないかと思います。
但し、エディタによってはこれらのキーを上書きして別の機能を割り当ててしまっている場合があるのでご注意を…。

viも色々と影響与えてますよ

ここまでemacsのショートカットが多かったですが、viのショートカットをサポートしているものも色々ありますよね。

カーソルの移動ではないですが、man や --helpオプション や git diff で開くときに使われるlessなんかもviライクなショートカットをサポートしてますよね。

ちなみに、自分はこの記事を書くまでlessコマンドで開いてたということに気づいてなかったと言うのは内緒…(viにそういう開くモードが有るもんだとばっかり思ってました…)

ショートカット意味
j1行上に移動
k1行下に移動
d下にページ送り (※viだとノーマルモードでCtrl + d)
u上にページ送り (※viだとノーマルモードでCtrl + u)
gページ先頭へ (※viだとノーマルモードでgg)
Gページ終わりへ (※viだとノーマルモードでG)
/ページ内検索の文字列入力開始
n次のページ内検索結果へ
N次のページ内検索結果へ

なお、lessの場合単にd,uではなくて、Ctrl + d, uでも元のショートカットと同じ挙動になります。
また、gもggも最終的には同じ場所にたどり着くので、vi使いは全く気にせず同じショートカットで使えるようになっていますよね。
qでlessコマンドを終了するのとかもviみたいですよね。

viのショートカット体系のコマンド達

screenのコピーモードもviのようなショートカットコマンドをサポートしています。

ショートカット意味
h左へ
j下へ
k上へ
l右へ
ggバッファ内先頭へ
Gバッファ内末尾へ
Ctrl-u半ページ上に移動
Ctrl-d半ページ下に移動
/検索の文字列入力開始
n次の検索結果へ
N次の検索結果へ

他にもviと同じ動作をするコマンドが幾つかあります(^,$,w,b,eなど)

他にも、個人的にはtigとかよく使ったりしますが、こちらもviライクなコマンドラインをサポートしたりしてます。

たぶん、他にもたくさんあるんだろうなーと思いつつ、思いつき次第書き込む形式で追記していきたいと思います。それかコメントで教えて下さい (←えっ…)

おまけ

webの小ネタ系でviのhjklをショートカットとしてサポートしている場合も多いですが、個人的によく使うのは、

  • Google日本語入力でzh、zj、zk、zlでviの移動方向にあわせて各矢印が出る(←↓↑→)

いろいろなwebサービスでおもむろにhjklと叩くと色々と反応がある場合があって、『あぁ、意識してるんだな』感が感じられます。

まとめ

特にCLI系は新しいものに触れたときでも、vi系やemacs系のショートカットをサポートしているものも多いですので、特にマニュアル読まずに他で使えているショートカットを試してみるだけで意外と使えちゃったりします。
というわけで、ショートカットはemacs系とvi系を少し覚えるだけでも決して損はないかと思いますので頑張って覚えましょう!

それでは皆さん、良いショートカットライフを!

※ この記事では便宜上emacsライク、viライクなショートカットというような表現をしてますが、emacsやviが先に実装したのか、それとも他から影響を受けて、後から実装したのかについては検証しませんのでご了承下さい。

vimを使い始めて2ヵ月たったので経過を纏めてみた。

$
0
0

目的

vimを使い始めてから、約2ヵ月立った。ある程度vimの操作に慣れてきたので、ここまでの経験を纏めておきたいと考えた。

使い始め

大学のコンピュータリテラシーの教員がvimを好きだといっていたので、vimに興味を持った。
vs codeを使っていたが、好奇心から7月の終わりにkaoriya vimを導入した。vimに初めて触り、hjklの移動に感動した。
このころは、vim adventureやvim snakeで遊び、カーソルの移動を覚えた。まだ、vimを自分のメインのエディターにする気はなかったが、初めはつんつんしているが使い方に習熟するとものすごくデレてくれる高機能なエディターらしいのでいつかは使いこなしたいと思っていた。
また、僕がサクラエディタからVimに乗り換えるまでや、Big Sky :: Learn Vim Progressivelyを参考にしてvimの操作を覚えていった。
ある程度、hjklの移動とw, qコマンドを使えるようになったところで、「vim&Emacsエキスパート活用術」についてきたチートシートを持ち歩き、さらにコマンドを覚えようとした。また、自動補完のためのプラグインやおすすめと書かれていたunite.vimやquickrun.vim等を入れた。vimrcが一気に大きくなった。

kaoriya版vimに不満を持つ

kaoriya板のvimには独自のプラグインやvimrcがあり、どんな設定がされているのかわからないことが不満になった。
なので、vimのソースをgitから持ってきて自分でビルドした。vs 2017でおこなったので+python, +luaでのビルドはできなかった。それに伴い、neocompleteが使えなくなり、neocomlecachに切り替えた。
また、vimrcを見直して、わかっていないけど入れていた設定を消していった。

スパルタンvimを読み、プラグインなしのvim使いにあこがれる。

とりあえず入れてみたけど使っていなかったプラグインを消した。
ただ、自動補完が利かなくなるのは不安だったので、neocomplecachだけは残しておいた。
このあたりからプラグインなしでvimを使えるように調べ始めた。

vimをレポートの作成やメモにも使うようになり、新しいコマンドを積極的に使おうとするようになった。
ウィンドウの分割やインデントを作るコマンド、モーションが増えた。

標準でついている補完の力を知る。

Ctrl-n, Ctrl-p補完から使い始め、行補完、辞書補完と試していった。これだけでも意外と快適にjs, pythonを書けることがわかった。
より補完のことを調べ始めた。
オムニ補完があまりによかったので、vimrcからneocomplecachの設定を消した。
「実践vim」を買った。よりvimvimできるとモチベーションが上がった。
また、このころマクロ漁船を知りjavascriptでbrainfuckのインタプリタを組んだ。

現在netrwの存在を知る。

標準のファイラーが予想を上回って使いやすかった。
使えるコマンドやモーションが増え、vimに慣れてきた。しかし、いまだにtagsやマクロ、ジャンプ等が使えていないので徐々に使える機能を増やしていきたい。
vimに対する印象が時々デレてくれる子に変わった。

High Serria にアップデートしたら,Vimが使えなくなったときの対処法.

$
0
0

とりあえずVim使ってみるかーとiTerm2を起動して,vimと入力するとvimが立ち上がりませんでした.
vimはbrew でインストールしてました.

とりあえずbrew を使ってupgradeしてみると,エラーでできません.

$ brew upgrade vim 
省略

if_python.c:67:10: fatal error: 'Python.h' file not found
#include <Python.h>
         ^~~~~~~~~~
1 error generated.

省略

Python関係の問題かと思って,調べたところスタックオーバーフローに似た問題がありました.

私の場合,pyenvを利用して,pythonの開発環境を構築していたので

$ pyenv local system 

によりpythonの環境をlocalに戻して,upgradeすると

$  brew upgrade vim 

できました.

pyenv以外で環境を構築している方は,
それぞれの環境のコマンドでsystemのpythonに変更するupgradeができるようになると思います.

systemのpythonに戻したあとは,pythonのバージョンをもとに戻すことを忘れずに.


vimの補完でエラー

$
0
0

vimを操作していて以下のようなエラーが出た。

_arguments:450: _vim_files: function definition file not found

以下のページに解決策があった。
https://github.com/robbyrussell/oh-my-zsh/issues/518

~/.zcompdumpというファイルが悪さをしている模様。

# zcompdumpは削除しても大丈夫
$ rm ~/.zcompdump

# 新しいzcompdumpが出来る
$ exec zsh

これで解決した。

Vim におけるプラグイン管理についてまとめてみた

$
0
0

概要

最近 Xcode で iPhone アプリを開発したり Unity で VR アプリ開発をする生活から、 ターミナルで Rails や Python を書く生活に変わったので、vim 周りを再調査しました。自分が以前環境整備していた頃とは大きく環境が変わってそう。

vim のプラグインをどう管理して、どう探すかについて簡単にまとめました。

プラグインマネージャー

vim のプラグイン管理はサードパーティー製のプラグインマネージャーを使うのが一般的。

人気どころのプラグインマネージャーを以下に列挙した。github のスター数で比較すると Vundle が一番使われてそう。今回は Vundle に絞って以下、導入について説明するが、他も github の README に大抵導入方法が書いてあるのでそちらを参考に。

ちなみに NeoBundle は日本製で、国内での人気は高かったが、最近作者さんが dein.vim を作って、今は NeoBundle のメンテをしていないそう。

プラグインマネージャースター数備考
Vundle15,768スター数が一番多い
vim-pathogen9,435
vim-plug8,495.vimrc への記述が少なくて済む
NeoBundle2,098日本製
dein.vim1,432NeoBundle の後継

Vundle のインストール

Vundle Quick Startを参考に説明する。

1. .vim/bundle 以下に Vundle.vim を配置する

$ git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim

2. .vimrc の先頭に以下を記載

Plugin 'VundleVim/Vundle.vim' 以下の行に導入したいプラグインを追加していけば良い。

set nocompatible
filetype off

Plugin 'VundleVim/Vundle.vim'

" 導入したいプラグインを以下に列挙
" Plugin '[Github Author]/[Github repo]' の形式で記入
Plugin 'airblade/vim-gitgutter'

call vundle#end()
filetype plugin indent on

" その他のカスタム設定を以下に書く

3. プラグインのインストール

インストール方法は 2 つ。

  • vim を開いた状態で、以下を入力して Enter
:PluginInstall
  • ターミナル上で以下のコマンドを実行
$ vim +PluginInstall +qall

Vim プラグインの探し方

vim.org

  • vim 本家のサイト
  • プラグイン数: 5476

スクリーンショット 2017-09-17 15.44.10.png

Vim Awesome

  • プラグイン検索サービス
  • プラグイン数: 15621
  • インストール数、 github スター数が見れるので人気のプラグインが分かりやすい

スクリーンショット 2017-09-17 15.44.25.png

圧倒的に本家より、 Vim Awesome が使いやすく、プラグイン数も多いので Vim Awesome 一択な気がする。他にもツールあれば教えてください。

複数 PC 間のプラグイン同期

.vimrc など、 PC の設定系のドットファイル (.bashrc や .tmux.conf など)はまとめて github のリポジトリにしておくのが管理上ラク。新しいプラグインマネージャーを入れた時に git に push して、自分の開発環境の最新の状態を保てる。

簡単なシェルスクリプトを書いて、ホームディレクトリ間でコピーできるようにすればインストールや更新も簡単にできる。

まとめ

プラグインの探し方、管理の仕方についてまとめました。
なにか間違い等あればご指摘ください!

関連記事

vimを長らく使ってるのに矢印キーを使う軟弱者にファイルを編集させない

$
0
0

いつまで経ってもカーソル操作を矢印キーでやってしまう軟弱者にファイルを編集する資格なんて無かった

nnoremap<Up>    :q!<CR>nnoremap<Down>  :q!<CR>nnoremap<Left>  :q!<CR>nnoremap<Right> :q!<CR>inoremap<Up><ESC>:q!<CR>inoremap<Down><ESC>:q!<CR>inoremap<Left><ESC>:q!<CR>inoremap<Right><ESC>:q!<CR>

vimでER図

$
0
0

TL;DL

ふとER図が必要になったので、簡単にいい感じに作成できるもの。
またvimでできると便利と思ったので、その記録。
※最低限を目指します

tools

  • vim
  • NeoBundle
  • plantuml
  • brew

Let's Try!

まずは準備から

plantumlをinstallします

brew install plantuml

make実行時のscript

plantuml
#!/bin/sh
plantuml -tpng $@
open ${@%%.*}.png

※好きな場所に置いてください

実行権限あげる

sudo chmod 755 ~/file/path/plantuml

vimのpluginをinstall

NeoBundle "aklt/plantuml-syntax"
let g:plantuml_executable_script = "~/file/path/plantuml"

※.vimrcに追記し、再度開いてinstallしてください

ER図を書いてみる

test.uml
@startuml

class Users {
  id
  email
  user_name
}

class Image {
  id
  url
  type
  user_id
}

Users ----o| Image

@enduml

適当な場所でfileを作成し、 vimのコマンドモードで :makeを実行する
https://gyazo.com/9ecc06df4e633fc967881b88720d0058


簡単!便利!

Vagrant1.9, 2.0でカラースキームが上手くいかない

$
0
0

Vagrantをアップデートした際、カラースキームでVimの色を変えていたものが壊れてしまいました
最終的に原因が分からなかったため、Vagrantのバージョンを1.8まで下げて利用するようにしました

同じようにVimの色ごときで時間を潰す人が増えないように書いてみました(一日無駄にした)

環境

Windows 10
Git for Windows (Git Bash)
Vagrant 2.0.0 or 1.9.8
Virtual Box 5.1.28 or 5.0.40

Vagrantの2.0と1.9で問題は起こりました
Virtual Boxのバージョンはあんまり関係なさそうでした

何が起こったのか?

簡単に言うと、set t_Co=256が有効にならない
それだけならいいのだが、背景色が変な灰色になる
vimを抜けても背景が残る
結構気持ち悪い

Git Bashの設定を変えてみる

とりあえず、xtermからxterm-256colorにして試してみるが変わらない
そもそも元々xtermでも上手く動いていたのだから関係なかった

仮想環境側をxtermにしてみる

仮想マシンのCent OSでexport TERM=xterm-256colorで256カラーに対応させようとするが、xtermに対応していないようでvim自体が壊れる
ここら辺の設定は弄ったことがないため、あまり無理をしない方がいいと思う・・・
もし仮に上手くいったとしても仮想マシン内のOS自体は256カラーを認識しているため、無意味である

Git for Windowsも更新

Git for Windows自体がアップデートについていけていないのかもと思い、最新版にしてみる
無意味

コマンドプロンプトで試す

コマンドプロンプトでvagrant sshして試してみるが、Git Bashの時と同じ感じになる
ここでVagrant側の問題だと確信

Vagrantのバージョンを下げてみる

2.0.0から1.9.8に下げてみるが変わらず
1.8.7に下げてみたらエラーがでて出来なかったため、2.0.0に戻す

Virtual BOXのバージョンを下げてみる

5.1.28から5.0.40に下げてみるが変わらず

再びVagrantのバージョンを下げる

依存関係を調べたらVirtual Box 5.0.40とVagrant 1.8.7なら動きそうだったため、再びVagrantのバージョンを下げる
上手く動いたのでvimを確認したところ、カラースキームが元に戻っている!やった!

まとめ

Vagrant 1.8.7
Virtual Box 5.0.40

この組み合わせなら無事に256カラーでのカラースキームが使えた
Virtual Boxのバージョン操作では特に変わらなかったから、Vagrant 1.9以降での問題だと思います

VMwareとか他の仮想マシンに蔵変えしようかな・・・・・・

[修正版] PlantUML を vim から使う@Windows

$
0
0

 @hokorobiさんのPlantUML を vim から使う@Windowsを読んでバッチファイルを少し変えたほうがPlantUMLを柔軟に使えていいんじゃないかと思ったので、それを公開してみることにする。
 ほんの僅かな変更だけど。

hoge.bat
set GRAPHVIZ_DOT=C:\path\to\dot.exe
java -jar $HOME/lib/java/plantuml.jar %*

真のVimmerにおすすめのシェルスクリプト【ネタ】


3年間育てた自分のvimrcを解説

$
0
0

はじめに

Vim歴多分3年ぐらいです。
育て上げたvimrcをざっくりと分割して解説してみるテスト。
良くない記述方法や改善点あれば是非コメントで教えてください。
このvimrcファイルはこちら

初期設定

初期設定 Part1

お決まりの設定。
set nocompatibleは最近の環境では必要ないらしいが念のため。
MyAugroupはプラグイン設定でも使用している為最初の方に記述。

if0|endifsetencoding=utf-8scriptencoding utf-8if&compatiblesetnocompatibleendiflet s:is_windows = has('win16')|| has('win32')|| has('win64')let s:is_mac = has('mac')

augroup MyAugroup
  autocmd!
augroup END

初期設定 Part2

vimで使うディレクトリやファイルの場所を設定。
Windows環境の時はファイルパスの \/にする set shellslashを使用。
プラグインがうまく動かない場合があるが、今のところ大丈夫。

if s:is_windowssetshellslashlet s:vimfiles_dir = expand('~/vimfiles')elselet s:vimfiles_dir = expand('~/.vim')endiflet s:vimcache_dir   = expand('~/.cache/vim')let s:viminfo= s:vimcache_dir.'/viminfo'let s:backup_dir     = s:vimcache_dir.'/backup'let s:swap_dir       = s:vimcache_dir.'/swap'let s:undo_dir       = s:vimcache_dir.'/undo'let s:view_dir       = s:vimcache_dir.'/view'let s:dein_dir       = s:vimcache_dir.'/dein.vim'let s:dein_toml      = s:vimfiles_dir.'/rc/dein.toml'let s:dein_cache_dir = expand('~/.cache/dein')let s:local_vimrc    = s:vimfiles_dir.'/local.vimrc'

初期設定 Part3

vimで使うディレクトリの作成とdeinのインストールを行う。

function! s:make_dir(dir) abort  " silent! call mkdir(dir, 'p')if!isdirectory(a:dir)call mkdir(a:dir,'p')endifendfunctioncall s:make_dir(s:vimcache_dir)call s:make_dir(s:backup_dir)call s:make_dir(s:swap_dir)call s:make_dir(s:undo_dir)call s:make_dir(s:view_dir)if!isdirectory(s:dein_dir)echomsg'dein.vim does not exists.'if executable('git')
    execute '!git clone https://github.com/Shougo/dein.vim' s:dein_direlseechomsg'git does not exists.'endifendif

初期設定 Part4

<Leader>のキーマップにに ,を使用する。
以前は clever-f.vimを使用していたので ,は不要でしたが、消してしまったので ,が使えなくて不便。

letg:mapleader =','

初期設定 Part5

guioptionはGVimをCLI風にする設定。
下の方の記述はGUIでない時の設定ははモードごとにカーソルを切り替える用。
フォントはRictyを使用。
macmetaはMacVim用。

if has('gui_running')setguioptions-=aguioptions-=isetguioptions-=rguioptions-=Lsetguioptions-=eguioptions-=mguioptions+=M guioptions-=tguioptions-=T guioptions-=gsetguioptions+=cif s:is_windowsset renderoptions=type:directx,renmode:5setguifont=Ricty_Diminished:h13.5:cSHIFTJIS,MS_Gothic:h13elseif s:is_macsetguifont=Ricty\ Regular:h17set macmetaset transparency=10endifelselet&t_ti .="\e[1 q"let&t_SI .="\e[5 q"let&t_EI .="\e[1 q"let&t_te .="\e[0 q"endif

dein.vim設定

deinの設定。
プラグインの設定内容はまた元気がある時にやるかもしれない。
toml読み込みは遅いらしいがdein.vimはキャッシュ機能があるので問題なし。
call dein#call_hook('source')vim-singletonを起動するための設定。
silent! execute 'helptags' s:dein_dir . '/doc/'はdein.vimのヘルプを生成するための行。

if isdirectory(s:dein_dir)&& executable('git')&& (executable('rsync')|| executable('xcopy'))letg:dein#install_process_timeout =600letg:dein#install_progress_type ='tabline'if has('vim_starting')
    execute 'set runtimepath^='.s:dein_direndifif dein#load_state(s:dein_dir)call dein#begin(s:dein_cache_dir)call dein#add(s:dein_dir, {'rtp': ''})call dein#load_toml(s:dein_toml)call dein#end()call dein#save_state()endifcall dein#call_hook('source')if dein#check_install()call dein#install()endif  " if dein#check_update()  "   call dein#update()  " endifsilent! execute 'helptags' s:dein_dir . '/doc/'endiffiletype plugin indent on

Options

この辺りは好み。
知らないオプションが出てきたときは :help 'オプション名'で引くと良い。
:optionコマンドや :help options-listでどんなオプションがあるか確認するのもオススメ。
optionは :optionsコマンドの順番通りに(多分)設定している。

Options Part1

set tags+=tags;は親ディレクトリのタグファイルも検出してくれる用設定。
listcharsで不可視文字をいい感じに表示するように。

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" Options""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" important" moving around, searching and patternssetwhichwrap+=b,s,h,l,<,>,~,[,]setincsearchsetignorecasesetsmartcase" tagssettags+=tags;" displaying textsetscrolloff=5set breakindentsetshowbreak=>\setdisplay+=lastlinesetredrawtime=500setlistsetlistchars=tab:→\ ,eol:⏎,space:・,extends:>,precedes:<setnumbersetconceallevel=2setconcealcursor=nc" syntax, highlighting and spellingsethlsearchnohlsearch" multiple windowssetlaststatus=2setstatusline=%F%m%rsetstatusline+=%=setstatusline+=\ \|\ %{&fileformat},%{&fileencoding}%{(&bomb?\"(bom)\":\"\")}setstatusline+=\ \|\ %Ysetstatusline+=\ \|\ %l/%L,%c" set noequalalwayssetsplitright

Options Part2

tablineをいい感じに表示するvimscript。
書いた時の記憶があんまりないので内容は覚えてないけどTabの幅とかを自動で調節するので便利。
内容に意味は無いのでスキップ推奨->スキップ

" multiple tab pagessetshowtabline=2settabline=%!MyTabLine()function! MyTabLine()if!exists("s:tabline")let s:tabline= s:tab(16,32,8)endifreturn s:tabline.gen()endfunctionfunction! s:tab(size, maxsize, minsize) abortlet self = {}let self.size =a:sizelet self.maxsize =a:maxsizelet self.minsize =a:minsizefunction! self.gen() abort dictletleft= self.left()letright= self.right()let leftsize = strdisplaywidth(left)let rightsize = strdisplaywidth(right)let width =&columnslet middlesize = width - leftsize - rightsizelet middle = self.middle(middlesize)returnleft.middle.'%=%<'.rightendfunctionfunction! self.left() abort dictreturn' 'endfunctionfunction! self.right() abort dictreturn' 'endfunctionfunction! self.label(n) abort dictlet buflist = tabpagebuflist(a:n)let curbuf = buflist[tabpagewinnr(a:n)-1]let bufcount = len(buflist)>1 ? len(buflist) : ''let tabmod = len(filter(copy(buflist),'getbufvar(v:val, "&modified")')) ? '(+)' : ''let tabmod = getbufvar(curbuf,'&modified') ? '+' : tabmodlet fname = fnamemodify(bufname(curbuf),':t')let quickfix = getbufvar(curbuf,'&buftype')!~'quickfix' ? '' : '[Quickfix]'let nofile = getbufvar(curbuf,'&buftype')!~'nofile' ? '' : '[下書き]'let name ='[無題]'let name = len(quickfix) ? quickfix : namelet name = len(nofile) ? nofile : namelet name = len(fname) ? fname : namelet label =' '.a:n.tabmod.':'.bufcount.' '.name.' 'return labelendfunctionfunction! self.middle(middlesize) abort dictlet sep ='|'let labels = []for tabnr in range(1, tabpagenr('$'))let label = self.label(tabnr)let label = self.labelformat(label, sep, self.size, self.maxsize)call add(labels, label)endforlet maxsize = self.maxsizewhilea:middlesize < self.labelssize(labels, sep)&& maxsize > self.sizelet maxsize = maxsize -1leti=0whilei< len(labels)if maxsize < strdisplaywidth(labels[i].sep)let labels[i] = self.labelformat(labels[i], sep, self.size, maxsize)endifleti=i+1endwhileendwhileifa:middlesize < self.labelssize(labels, sep)let persize =a:middlesize / tabpagenr('$')let persize = max([persize, self.minsize])leti=0whilei< len(labels)let labels[i] = self.labelformat(labels[i], sep, self.size, persize)leti=i+1endwhileendifleti=0let strlabels =''whilei< len(labels)lettabn=i+1lethl=tabnis tabpagenr() ? '%#TabLineSel#' : '%#TabLine#'lethl .='%'.tabn.'T'let strlabels .=hl.labels[i].'%#TabLineFill#'.sepleti=i+1endwhilereturn strlabelsendfunctionfunction! self.labelssize(labels, sep) abort dictlet sum =0for label ina:labelslet sum = sum + strdisplaywidth(label.a:sep)endforreturn sumendfunctionfunction! self.substring(src,start,end) abort dictlet splitlabel = split(a:src,'\zs')returnjoin(splitlabel[a:start : a:end],'')endfunctionfunction! self.labelformat(label, sep, size, maxsize) abort dictlet label =a:labellet label .= repeat(' ',a:size - strdisplaywidth(a:label.a:sep))leti= strchars(label)while strdisplaywidth(label.a:sep)>a:maxsizelet label = self.substring(label,0,i).'> 'leti-=1endwhilereturn labelendfunctionreturn selfendfunction

Options Part3

backup、swap、undo、viewファイルは邪魔にならない場所に生成しているので一応使用。
keywordprg<S-k>押した時にVimのヘルプを引く設定。

" terminal" using the mousesetmouse=a" GUI" printingsetprintheader=%<%t%h%m%=%N" messages and infosetnovisualbellsetnoerrorbellssetshowcmdset belloff=allsethelplang=ja,en" selecting textsetclipboard+=unnamed" editing textsetbackspace=indent,eol,startsetpumheight=10setmatchtime=1setmatchpairs+=<:>setnrformats=hex" tabs and indentingsettabstop=4" tab widthsetshiftwidth=2" auto indent widthsetsofttabstop=2" tabkey spacesetexpandtab" softtabsetautoindentsetsmartindent" folding" diff mode" mapping" reading and writing filessetbackup
execute 'set backupdir='.s:backup_dir" the swap file
execute 'set directory='.s:swap_dirsetswapfile" command line editingsethistory=10000setwildmode=fullsetwildmenusetundofile
execute 'set undodir='.s:undo_dir" executing external commandssetkeywordprg=:help" running make and jumping to errors" system specific" language specificsetiminsert=0setimsearch=0" multi-byte characterssetfileencodings=utf8,cp932,eucjpsetambiwidth=double" varioussetviewoptions-=options
execute 'set viewdir='.s:view_dir
execute 'set viminfo+=n'.s:viminfo" phpletg:PHP_vintage_case_default_indent =1

AutoCommands

内容はざっくり以下の通り。

  • viewファイルを作成、ロードする
  • 自動で開いているファイルにcd(set autochdirで可能ですが、プラグインで不具合が出たのでautocmdで)
  • vimgrepで一部の拡張子を除外
  • QuickFixを自動で開く
  • 各言語用インデント設定
  • IMEの状態によってカーソルの色を変更
  • QuickFixを見やすく
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" AutoCommands""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
augroup MyAugroup  " view
  autocmd BufWritePost ?* if expand('%')!=''&& &buftype!~'nofile'|mkview|endif
  autocmd BufWinEnter ?* if expand('%')!=''&& &buftype!~'nofile'|silent loadview |endif  " set autochdir
  autocmd BufEnter * execute 'silent! lcd '.expand('%:h')  " auto jump
  autocmd BufReadPost * if line("'\"")>1&& line("'\"")<= line('$')| execute 'normal! g`"'|endif  " quickfix
  autocmd QuickFixCmdPrevimgrepsetlocalwildignore=*.gif,*.png,*.jpg,*.swf,*.flv,*.mp4,*.pdf,*.ttf,*.mp3,*.wav,tags
  autocmd QuickFixCmdPostvimgrepsetlocalwildignore<
  autocmd QuickFixCmdPost *grep* cwindow  " ftplugin
  autocmd FileType php setlocaltabstop=4shiftwidth=4softtabstop=4
  autocmd FileType javascript setlocaltabstop=2shiftwidth=2softtabstop=2
  autocmd FileType json setlocalconceallevel=0
  autocmd FileType html setlocaltabstop=2shiftwidth=2softtabstop=2
  autocmd FileType qf call s:MyFTPluginQuickfix()  " ftdetect
  autocmd BufNewFile,BufRead *.tpl setfiletype=php  " syntax
  autocmd VimEnter,ColorScheme * call s:MyHighlight()

augroup END

function! s:MyHighlight() abortif has('multi_byte_ime')|| has('xim')    " highlight Cursor guibg=DarkRed guifg=NONEhighlight CursorIM guibg=Green guifg=NONEendifendfunctionfunction! s:MyFTPluginQuickfix() abortsetlocalstatusline=%t%{exists('w:quickfix_title')?\ '\ '.w:quickfix_title\ :\ ''}\ %=%l/%Lsetlocalnowrapsetlocalcursorlineendfunction

Commands

内容は以下の通り。
いろいろな所から拝借。

command内容
Wsourcevimscriptファイルを読み込んで実行する
vimrc書いてるときとかに便利
CdCurrent今開いているファイルのディレクトリにcdする
Scratch保存しない一時ファイルを作成する
DiffOrig最後に保存したファイルとdiffする
VimGrepFile開いているファイルでvimgrepする
VimGrepDirカレントディレクトリでvimgrepする
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" Commands""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""if exists('$MYVIMRC')
  command! EditMyVimrc edit $MYVIMRCendif
command! Wsource if&filetype=='vim'|write| source % |else| echo 'this is not vimfile.'|endif
command! CdCurrent cd %:p:h
command!-bang Scratch execute '<bang>'=='!' ? 'tabedit' : 'new'|setlocalbuftype=nofile noswapfile
command! DiffOrig vertnew|setbuftype=nofile | read ++edit # |0delete_ |diffthis|wincmdp|diffthis
command!-nargs=1 VimGrepFile execute 'vimgrep /\v<args>/j %:p'
command!-nargs=1 VimGrepDir execute 'vimgrep /\v<args>/j **'

Mapping

わかりにくそうなやつだけ以下にピックアップ。

  • ビジュアルモードで行ごとに . , @を使えるように。
  • <S-カーソルキー>でウィンドウの大きさを調節。連打できるので便利。
  • <Space>をプレフィックスとしてよく使うコマンドのエイリアスにしてる。
  • -はオプション切り替え系。
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" Mappings""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""nnoremap<ESC><ESC> :<C-u>nohlsearch<CR><ESC>nnoremap Y y$nnoremap<expr> gj &wrap ? 'j' : 'gj'nnoremap<expr> gk &wrap ? 'k' : 'gk'nnoremap<expr>j&wrap ? 'gj' : 'j'nnoremap<expr>k&wrap ? 'gk' : 'k'vnoremap<expr> gj &wrap ? 'j' : 'gj'vnoremap<expr> gk &wrap ? 'k' : 'gk'vnoremap<expr>j&wrap ? 'gj' : 'j'vnoremap<expr>k&wrap ? 'gk' : 'k'nnoremapx"_xvnoremapx"_xnnoremap X "_Xvnoremap X "_X" nnoremap s <Nop>" vnoremap s <Nop>" nnoremap S <Nop>" vnoremap S <Nop>

cnoremap <C-p><Up>
cnoremap <C-n><Down>nnoremap<C-n> :<C-u>tabnext<CR>nnoremap<C-p> :<C-u>tabprevious<CR>vnoremap . :normal .<CR>vnoremap @ :<C-u>execute "'<,'>normal @".nr2char(getchar())<CR>nnoremap<S-UP><C-w>+nnoremap<S-Down><C-w>-nnoremap<S-Left><C-w><nnoremap<S-Right><C-w>>nnoremap<C-UP><C-w>Knnoremap<C-Down><C-w>Jnnoremap<C-Left><C-w>Hnnoremap<C-Right><C-w>Lnoremap<Space><Nop>nnoremap<Space>jo<ESC>nnoremap<Space>k O<ESC>nnoremap<Space>w :<C-u>write<CR>nnoremap<Space>q :<C-u>quit<CR>nnoremap<Space>Q :<C-u>quit!<CR>nnoremap<Space>bd :<C-u>bdelete<CR>nnoremap<Space><Space> %nnoremap<Space>* *Nnnoremap<Space>g* g*Nnnoremap<Space>n :<C-u>tabnext<CR>nnoremap<Space>p :<C-u>tabprevious<CR>nnoremap<Space>t :<C-u>tabedit<CR>nnoremap-<Nop>nnoremap-fh :<C-u>setfiletype html <Bar>setfiletype?<CR>nnoremap-fj :<C-u>setfiletype javascript <Bar>setfiletype?<CR>nnoremap-fp :<C-u>setfiletype php <Bar>setfiletype?<CR>nnoremap-fs :<C-u>setfiletype sql <Bar>setfiletype?<CR>nnoremap-fv :<C-u>setfiletypevim<Bar>setfiletype?<CR>nnoremap-fm :<C-u>setfiletype markdown <Bar>setfiletype?<CR>nnoremap-ft :<C-u>setfiletype text <Bar>setfiletype?<CR>nnoremap-eu :<C-u>setlocalfileencoding=utf8 fileencoding?<CR>nnoremap-es :<C-u>setlocalfileencoding=sjis fileencoding?<CR>nnoremap-w :<C-u>setlocalwrap!wrap?<CR>nnoremap-c :<C-u>setlocalcursorline!cursorline?<CR>nnoremap-n :<C-u>setlocalnumber!number?<CR>nnoremap-t :<C-u>setlocalexpandtab!expandtab?<CR>nnoremap-i :<C-u>setlocalignorecase!ignorecase?<CR>nnoremap-h :<C-u>setlocalhlsearchhlsearch?<CR>if exists('$MYVIMRC')nnoremap<F1> :<C-u>edit $MYVIMRC<CR>nnoremap<S-F1> :<C-u>tabedit $MYVIMRC<CR>endif
execute 'nnoremap <F2> :<C-u>edit '.s:local_vimrc.'<CR>'
execute 'nnoremap <S-F2> :<C-u>tabedit '.s:local_vimrc.'<CR>'
execute 'nnoremap <F3> :<C-u>edit '.s:dein_toml.'<CR>'
execute 'nnoremap <S-F3> :<C-u>tabedit '.s:dein_toml.'<CR>'

Colorscheme

最初に見つけたカラースキームを自動で読み込むやつ。
基本的に vim-hybridを使ってます。

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" Colorscheme""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""function! s:find_colorscheme(colorschemes) abortforcolorschemeina:colorschemeslet result = split(globpath(&runtimepath,'colors/'.colorscheme['name'].'.vim'),'\n')if len(result)returncolorschemeendifendforreturn {'name': 'default','background': 'light'}endfunctionif has('gui_running')let s:colorschemes = [
        \  {'name': 'hybrid','background': 'dark'},
        \  {'name': 'desert','background': 'dark'},
        \]elselet s:colorschemes = [
        \  {'name': 'desert','background': 'dark'},
        \]endiflet s:colorscheme= s:find_colorscheme(s:colorschemes)syntax enable
execute 'set background='.s:colorscheme['background']
execute 'colorscheme' s:colorscheme['name']

local.vimrc読み込み

いろいろな環境でVimを使っているのでマシンごとの個別の設定を読み込んでいるファイルでやる。
例えばMacだとUSキーボードを使用しているのでコマンドを入力しやすくするために ;:を入れ替える設定をしています。

if filereadable(s:local_vimrc)
  execute 'source' s:local_vimrcendif

雑魚Vimmerが[NeoBundle → dein]と[Mac → Windows]の同時の移行ではまったこと(ほぼリンク集)

$
0
0

対象者

  • WindowsでもVimを使いたい人
  • NeoBundleからdeinへの移行を考えている人
  • vimrcをがっつりう触るのが久しぶりでいろいろ忘れてしまった人

はまりポイント

  • NeoBundleが非推奨...だと
  • tomlってなんだ
  • Windowsって.vimrcじゃなくて_vimrcなんだよね...?
  • vimprocをビルドする必要があるらしいのだが。。。

Windowsって.vimrcじゃなくて_vimrcなんだよね...?

 ざっくりいうと、.vimrc_vimrcもWinでもMacでも読み込まれるようです。
ただ、優先順位が逆になっているようです。

 一方で、.vimディレクトリはWinではデフォルトでは読み込まれないようで、代わりにvimfilesというディレクトリにする必要があります。この辺りは、MacとLinuxでvimの設定ファイルを共有するときに考慮する必要が出てくるようですが、とりあえず移行する分にははまるほどではありません。まとめると以下のようになります。

WindowsMac/Linux
vimrc_vimrc優先.vimrc優先
.vim/vimfilesvimfilesのみ.vimのみ

もう少し細かい話は、このサイトを参考にするとよいと思います。

NeoBundleが非推奨...だと

 「NeoBundleはもう非推奨だからdein.vimを使おう!」というお話はよく目にしていたのですが、「別に不満なく使っているしなぁ」という感じで移行が進んでいませんでした。

 Macでしか使ったことのなかったVimの環境をWindowsで構築する必要が出てきたタイミングでdeinへの移行も挑戦してみました。「NeoBundleからdeinへの移行」系の記事を見てると簡単そうに見えたのでやってみましたが、実際には、vimprocのビルドがわからなかったり、tomlがよくわからなかったりで苦労しました。

tomlってなんだ

 toml自体については、この記事に詳しいです。今回での利用に関しては、

*.vim*.toml
vim自体の設定×
pluginの設定

というように、vim自体の設定とpluginの設定を分離させること記述が簡単なことが大きなメリットのようです。こちらの有名な記事を参考にしてもらえれば、実際の使い方もよくわかると思います。

 例えば、molokaiのインストールは以下の記述だけでOKです。

dein.toml
[[plugins]]
repo ='tomasr/molokai'

vimprocをビルドする必要があるらしいのだが。。。

 ほとんどの人はプラグインでvimprocを使っていると思いますが、Macの時と違ってWindowsでは、vimprocのビルドとその設定の記述に注意が必要です。deinへの移行やtomlに気を捕らわれててここを見落とすということもあるかもしれません。

訂正: 以下のコメントいただきました。こちらのコメントの通り、リンク先からダウンロードできます。つまり事前の自前ビルドは不要ということです。ちゃんと公式にありましたね。。。

Windows版のDLLは公式リポジトリで公開されていますので、ビルドは不要です。 https://github.com/Shougo/vimproc.vim/releases
Cygwinでビルドすると、Windows用ではなく、Cygwin専用のDLLができますので注意が必要です。

MinGWのインストール

 vimprocを使えるようにするには、makeしてあげる必要がありますが、デフォルトではWindowsにそのようなものは入っていません。そこで、MinGWをインストールしてビルドする必要があります1。その方法に関してはこちらを参考にすることで出来ると思います。

設定ファイルへの記述

 NeoBundleを使っていた方は、以下のような記述を設定ファイルにしていたと思います。

NeoBundleでの設定(vimファイル)
NeoBundle 'Shougo/vimproc.vim', {
\ 'build' : {
\     'windows' : 'tools\\update-dll-mingw',
\     'cygwin' : 'make -f make_cygwin.mak',
\     'mac' : 'make',
\     'linux' : 'make',
\     'unix' : 'gmake',
\    },
\ }

これは、公式のドキュメントと同じものですが、ここでOSによってどのmakeを使うかが指定されています。'build': 'make'だけになっている人もたまにいるみたいですが、Macの時でOSの違いを考えない場合は、それでも良いのですが、Windowsへの移行するときには必ず修正するようにしましょう。

 そして、dein.vimへ移行する場合には、次のように書き換えればOKです2

dein.vimでの設定(tomlファイル)
[[plugins]]
repo ='Shougo/vimproc.vim'
hook_post_update ='''if dein#util#_is_windows()let cmd ='tools\\update-dll-mingw'elseif dein#util#_is_cygwin()let cmd ='make -f make_cygwin.mak'elseif executable('gmake')let cmd ='gmake'elselet cmd ='make'endifletg:dein#plugin.build = cmd'''

まだはまっていること → 解決

不可視文字の表示設定でエラー

 不可視文字の表示をさせようとして、Mac時代にはうまく動いていた以下のコードを実行しようとするとエラーが出てうまくいっていません。

.vimrc
setlistchars=tab:≫-,trail:-,extends:≫,precedes:≪,nbsp:%,eol:? " NGsetlistchars=tab:\≫\-,trail:\-,extends:\≫,precedes:\≪,nbsp:\%,eol:\? " escape的なことをしてもNG
エラー内容
E474: 無効な引数です: listchars=tab:<81><e2>-,trail:-,extends:<81><e2>,precedes:<81><e1>,nbsp:%,eol:? " 上の方のエラー
E474: 無効な引数です: listchars=tab:\<81><e2>\-,trail:\-,extends:\<81><e2>,precedes:\<81><e1>,nbsp:\%,eol:\? " 下の方のエラー

文字コード関係のエラーだと思われませんがよくわかっていません。

コメントを頂いたので、コメントを基に以下のように調査し対応しました。(k-tanakaさん、ありがとうございます!)

文字コード修正

文字コードが合っていないように見えます。

ということで、まず、いただいたコメントの通り次のようになっていることを確認しました。

set encoding=utf-8
scriptencoding utf-8

listcharsで設定する全ての文字は幅が1でなければならない

ただ、listchars には全角幅の文字は使用できません。"≫" が全角幅で表示されるフォントを使用しており、set ambiwidth=double の設定をしている場合は、エラーとなります。

とコメントを頂いたので、改めてVim日本語ドキュメントで検索して確認しました。(最初からするべきだったと反省もしつつ。。。)

すると、listcharsオプションの説明部分に以下のような記述がありました。

文字 ':' と ',' は使えない。'encoding' が "utf-8" のときはUTF-8の文字
が使える。そうでないときはprintableな文字 {訳注: 文書先頭を参照} だけ
が使える。全ての文字は幅が1でなければならない。

正直、文字コードの話とかフォントの話は理解していないことが多いのですが、文字の幅が1でないようなものはlistcharsの文字として設定できないことはわかりました。

解決まで

上記のようにencodingscriptencodingの設定を確認して、ambiwidthsingleにして準備は整ったと思い、utf-8の"≪"を入力することでうまくいくかと思うとうまくいきませんでした。実は、私のケースでは

.vimrc
setfileencoding=utf-8

を抜かしていため、.vimrcの保存時に別コードに変換されていたようです。これでようやく次のコードで問題なくlistcharsが設定できました。

.vimrc
setlistchars=tab:≫-,trail:-,extends:≫,precedes:≪,nbsp:%,eol:?

  1. WindowsでもCygwinを導入していれば、Cygwinに入っているmakeを使うこともできるようです。追記: コメントをいただきましたが、CygwinでビルドするとCygwin専用のDLLができるようで注意が必要とのことです。 

  2. buildオプションを使うこともできるようですが、OSによって変えることは難しそうです。 

surround.vimで日本語の括弧を挿入する

$
0
0

Vimのプラグインであるsurround.vimを使っていますが,デフォルトでは日本語の括弧に対応していないので,設定で追加する方法を調べました.

とりあえず 「」【】()<>{}にだけ追加した設定が以下です.

.vimrc
"""""""""""""""""""""""""""""""""" vim-surround {  " add japanese surroundsletg:surround_{char2nr("「")} ="「 \r 」"letg:surround_{char2nr("」")} ="「\r」"letg:surround_{char2nr("【")} ="【 \r 】"letg:surround_{char2nr("】")} ="【\r】"letg:surround_{char2nr("(")} ="( \r )"letg:surround_{char2nr("(")} ="(\r)"letg:surround_{char2nr("<")} ="< \r >"letg:surround_{char2nr(">")} ="<\r>"letg:surround_{char2nr("{")} ="{ \r }"letg:surround_{char2nr("}")} ="{\r}""""" }""""""""""""""""""""""""""""""

カスタマイズした分は yss(などで括弧を追加することはできますが, cs(<での入れ替えなど,他のオペレーションには対応していないようです.詳しくは :help surround-customizingでドキュメントが参照できます.

と,ここまで書いたあとで以下のような記事を見つけたので,こちらで紹介されているvim-operator-surroundもいつか試してみたいと思います.

Vimで日本語を編集するいくつかの方法 - Qiita

VimでEsc押下時に英数入力に変更する

$
0
0

[目的]
VimでEsc押下時に英数入力に変更する

[対象]
Terminal, iTerm2, Cloud9, MacVim

[環境]
OS X El Capitan 10.11.6

[手順]
1. Install Karabiner-Elements
Download From https://pqrs.org/osx/karabiner/
2. Create Setting_File
Launch Terminal or iTerm2
vi ~/.config/karabiner/assets/complex_modifications/FromEscapeToJapanese_eisuu.json

FromEscapeToJapanese_eisuu.json
{"title":"Terminal等でESC時に日本語入力を英数に","rules":[{"description":"Terminal等でESCを押したときに日本語入力を英数に切り替える。","manipulators":[{"type":"basic","from":{"key_code":"escape","modifiers":{"optional":["any"]}},"to":[{"key_code":"japanese_eisuu"},{"key_code":"escape"}],"conditions":[{"type":"frontmost_application_if","bundle_identifiers":["^com\\.apple\\.Terminal$","^org\\.vim\\.","^com\\.googlecode\\.iterm2$","^org\\.mozilla\\.firefox$","^com\\.google\\.Chrome$","^com\\.apple\\.Safari$"]}]}]}]}

3. Enable Setting
Launch Karabiner-Elements
Complex Modifications > Rules > [Add rule]
Enable rule 'Terminal等でESC時に日本語入力を英数に'
Restart Terminal or Cloud9

[参考]
https://qiita.com/takaeda/items/38ecf7d98d1a3ef99ef0

kernel reading 備忘録

Viewing all 5608 articles
Browse latest View live


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