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

矩形ヴィジュアルでのカット/ヤンクした内容を,挿入/追加

$
0
0

矩形ビジュアルの挿入追加については,色々な箇所で紹介されておりますが,
こちらは,あまり目にすることがなかったので.

つか,まぁそれだけ普通に,特に必要とされることがないものだから...,なのでしょうが😏

具体的な例を使いながら進めさせていただこうかと思います.

ケース 1: 先頭(左端)へ

こういうシーンがあったとします.

case1.png

こうなるかと思います.

-case1.gif

貼り付けのキーは Pです.
小文字の pではありません.

また貼り付けの際,置くべきカーソルの位置は,左上端になります.
矩形ヴィジュアルで行頭位置列を指定したくもなりますが.

ケース 2: 途中の任意の箇所へ

次,両端ではなく真ん中です.

case2.png

こんな感じになるでしょうか.

-case2.gif

ケース 3: 末尾(右端)へ

最後です.

ここではちょっとした問題のある事象を敢えて用意してみたいと思います.

それは,挿入または追加の対象が揃っていない場合です.

case3.png

凸凹問題

上述 2 つのケースも同様の問題を抱えることになると思います.

各アイテムの長さが異なり,行末の位置がそれぞれにバラバラの場合.

貼り付ける前に,
一番長い行の行末位置以上のスペースを埋め,そのうえで貼り付ける,というオペレートになります.

正直,あまりスマートな感じはありません.

自身が分かっていないだけで,もっときちんとした正解があるかもしれません.

ご存知の方,いらっしゃいましたら.

-case3.gif

おわり

きっかけは,今回の例のような感じで,
垂直(Y軸)方向に,それぞれ対応した関係で並ぶ複数の塊があって,それらを,

水平(X軸)方向に並べたい,という場面に出くわしたことでした.

そして出くわしたシチュエーションに,
いちいちそんなことだけのためにエクセル起ち上げなくとも...,と.

状況が限られて,
決して汎用的でも,また応用が利くようなテクニックではありませんが.

参照,参考先としたリソースです.;

» 矩形ビジュアルモードを利用した編集を使いこなす — 名無しのvim使い
» :h v_b_I
» :h v_b_A
» コピペで使える都道府県一覧・県庁所在地一覧 HTMLタグ|Start Point

おしまいです.


.vueファイルを編集するときのVimの設定

$
0
0

シンタックスハイライト用のプラグインを入れる

vim-vueというプラグインを入れる

NeoBundleの場合

vimrc
NeoBundle 'posva/vim-vue'

これで大体はOKなのですが、いくつか問題が出ることがあります。

ファイルの途中でハイライトがきかなくなるとき

例えば

スクリーンショット 2018-07-16 12.53.02.png

このように途中でハイライトが効かなくなったとき

ファイルの先頭からパースしてハイライトを行う設定を追記する

autocmd FileType vue syntax sync fromstart

vueファイルのときだけそのように設定しました
結果
スクリーンショット 2018-07-16 12.57.49.png

NERDCommenterでのコメントアウト機能を直す

1つのVueファイルの中にHTML, JS, CSSの記述が存在するのでそのままだとコメントアウトが正確に動作しなくなります。
例えば

スクリーンショット 2018-07-16 13.03.34.png
こちらのdataの部分のようにHTMLのコメントアウトが挿入されてしまいます。

このとき
こちらに書いてあるように設定を行うと解決します
下記をvimrcに追記すればOK

letg:ft=''function! NERDCommenter_before()if&ft =='vue'letg:ft='vue'let stack = synstack(line('.'),col('.'))if len(stack)>0letsyn= synIDattr((stack)[0],'name')if len(syn)>0
        exe 'setf '. substitute(tolower(syn),'^vue_','','')endifendifendifendfunctionfunction! NERDCommenter_after()ifg:ft=='vue'setf vue
    letg:ft=''endifendfunction

正確にコメントアウトされるようになります

スクリーンショット 2018-07-16 13.05.21.png

以上です。

[Vim] neosnippetで使うsnippet自作

$
0
0

NeoSnippetをインストール

vimrc
NeoBundle 'Shougo/neosnippet.vim',{      \'depends':['Shougo/neosnippet-snippets'],      \'insert':1,      \'filetypes':'snippet',      \'unite_sources':[      \'neosnippet','neosnippet/user','neosnippet/runtime'],      \}

自作スニペットを格納するディレクトリを設定

vimrc
letg:neosnippet#snippets_directory ='$HOME/.vim/snippets/'

スニペットを追加する

追加する対象のプログラミング言語のファイルを開く

vim sample.rb

NeoSnippetEditコマンドを実行する

:NeoSnippetEdit

$HOME/.vim/snippets/ruby.snipが開くので編集する

snippets/ruby.snip
snippet logger
  Rails.logger.debug'${1} ---------------------'
  Rails.logger.debug $1

保存して.rbファイルで使用する

vim_snip.gif

${1}に入力された値がそのまま$1の部分にコピーされます。このあたりはお好みで使ったり使わなかったりするといいと思います。

以上

[Vim] Vim に Language Server Protocol クライアント機能を導入して Rubyの補完機能を復活させた

$
0
0

YouCompleteMeをしばらく前から使っていました。最近、MacOSXな環境で、Rubyの補完がうまく動かなくて、 .を入力した瞬間、 vim が死亡するようになってしまいました。原因は良くわかりません。とりあえず、死ぬのは困るので、 --disable-rubyinterpで、Vimをビルドしてました。

YouCompleteMe で、Ruby の補完ができなくなってしまったので、何か他に良い方法ないかとあちこちのサイトを眺めていて、 deoplete.nvimLanguageClient-neovimsolargraphを組み合わせたら、行けるんじゃないかと思い、試してみました。

deoplete.nvim

deoplete.nvim をインストールします。

.vimrc
if has('nvim')
  Plug 'Shougo/deoplete.nvim',{'do':':UpdateRemotePlugins'}else
  Plug 'Shougo/deoplete.nvim'
  Plug 'roxma/nvim-yarp'
  Plug 'roxma/vim-hug-neovim-rpc'endifletg:deoplete#enable_at_startup =1

LanguageClient-neovim

LanguageClient-neovimは、Neovimやvim を language server protocol(LSP) に対応させるためのスクリプトです。

.vimrc
Plug 'autozimu/LanguageClient-neovim',{    \'branch':'next',    \'do':'bash install.sh',    \}" (Optional) Multi-entry selection UI.
Plug 'junegunn/fzf'

設定の追加

起動時に deoplete を有効にして、Rubyスクリプトを編集するときは、 solargraph が LSPサーバーとして動作するように設定します。

.vimrc
letg:deoplete#enable_at_startup =1letg:LanguageClient_serverCommands={    \'ruby':['solargraph','stdio'],\}call deoplete#custom#var('omni','input_patterns',{    \'ruby':['[^. *\t]\.\w*','[a-zA-Z_]\w*::'],\})

Python3 interface のインストール

Python3 interface をインストールします。

$ pip3 install neovim

solargraph のインストール

$ gem install solargraph
$ yard gems
$ yard config --gem-install-yri

動作確認

.rbファイルを開いて、 clと入力すると以下のような候補が表示されます。

2018-07-14-140807_536x203_scrot.png

おわりに

もっと、色々いじると便利になるのかも知れませんが、今のところ、こんな感じで様子を見たいと思います。

他の言語でも LSPなサーバーをインストールすれば、同じように使えると思いますが、そこは様子を見ながら切り替えたいと思います。

Vim Ale で Docker 内のコマンド実行

$
0
0

Lint 用のコマンド (ここでは flake8) の実行パスが設定できるので、そこに登録してあげれば良い

~/.vimrc
letg:ale_python_flake8_executable='bin/flake8'
bin/flake8
#!/bin/bash

docker-compose exec web flake8 $@

Virtualenv の場合も、これで行ける気が

https://github.com/w0rp/ale/blob/master/doc/ale-python.txt

Neovim の設定を綺麗に整理してみた

$
0
0

はじめに

Neovim の設定を一年以上サボっていたので、久しぶりに整理しました。
Neovim を導入した当初は、他の方の設定ファイルをコピペしたものだったので、今回はしっかりドキュメントなどを見て設定しました。

やったこと

  • init.vim の設定
  • dein.vim の導入
  • Vim プラグインの導入
  • Vim プラグインごとの設定

環境

  • macOS Sierra: v10.12.6
  • Neovim: v0.3.0
  • Python2: v2.7.10
  • Python3: v3.7.0
  • Ruby: v2.4.4p296
  • Node.js: v10.6.0

設定ファイルだけ見たい方はこちら

GitHub に設定ファイルを共有しているので、設定ファイルだけ見たい方はそちらをご覧ください。

repository: https://github.com/tamago3keran/neovim-config/tree/master/plugins

久しぶりの Neovim 設定

なぜ .config ディレクトリ?

Neovim のドキュメントにも明記されていますが、 ~/.config/nvim/init.vimに設定を書きました。

  • Use $XDG_CONFIG_HOME/nvim/init.vim instead of .vimrc for configuration.
  • Use $XDG_CONFIG_HOME/nvim instead of .vim to store configuration files.

.configディレクトリ直下に設定ファイルを置くのは、 Neovim が XDG Base Directory Specification に対応しているからのようです。

  • XDG_CONFIG_HOME
    • ユーザー個別の設定が書き込まれるディレクトリ ( /etcと類似)。
    • デフォルトは $HOME/.configです。

init.vim の参考例

~/.config/nvim/init.vim
setnumber             "行番号を表示
set autoindent         "改行時に自動でインデントする
set tabstop=2          "タブを何文字の空白に変換するか
set shiftwidth=2       "自動インデント時に入力する空白の数
set expandtab          "タブ入力を空白に変換
set splitright         "画面を縦分割する際に右に開く
set clipboard=unnamed  "yankした文字列をクリップボードにコピー
set hls                "検索した文字をハイライトする

dein.vim でプラグイン管理

dein.vimは Shougo さんによって作成された Vim / Neovim のプラグインマネージャです。
このツールを使って、Vim プラグインの管理を簡潔にしました。

denite.vim の導入方法

dein.vimの導入方法も非常に簡単で、ドキュメント通りに行いました。

まずは以下のコマンドを実行しました。

% curl https://raw.githubusercontent.com/Shougo/dein.vim/master/bin/installer.sh > installer.sh
% sh ./installer.sh ~/.cache/dein

コマンドを実行した後に init.vimに以下のコードを追記しました。

~/.config/nvim/init.vim
if&compatible
  set nocompatible
endifset runtimepath+=~/.cache/dein/repos/github.com/Shougo/dein.vimif dein#load_state('~/.cache/dein')call dein#begin('~/.cache/dein')call dein#end()call dein#save_state()endiffiletype plugin indent on
syntax enable

これでプラグインを入れる準備は完了です!

プラグインの導入方法

いよいよ自分が好きなプラグインを入れていきます。
私は init.vimを膨らませたくなかったので、 toml ファイルに入れたいプラグインを書きました。

まずは init.vimに toml ファイルを読み込むコードを書きました。

~/.config/nvim/init.vim
 if &compatible
   set nocompatible
 endif
 set runtimepath+=~/.cache/dein/repos/github.com/Shougo/dein.vim
 if dein#load_state('~/.cache/dein')
   call dein#begin('~/.cache/dein')
+  call dein#load_toml('~/.config/nvim/dein.toml', {'lazy': 0})
+  call dein#load_toml('~/.config/nvim/dein_lazy.toml', {'lazy': 1})
   call dein#end()
   call dein#save_state()
 endif
 filetype plugin indent on
 syntax enable

dein.tomldein_lazy.tomlという2つの toml ファイルを作成していますが、以下のような違いがあります。

  • dein.toml
    • Neovim を起動した際にロードされる
  • dein_lazy.toml
    • プラグインを使用する際にロードされる

では dein.tomlというファイルを作って、以下の書式でプラグイン名を書いていきます。

~/.config/nvim/dein.vim
[[plugins]]repo='Shougo/dein.vim'[[plugins]]repo='tpope/vim-endwise'[[plugins]]repo='Townk/vim-autoclose'[[plugins]]repo='joshdick/onedark.vim'hook_add='''colorschemeonedark'''[[plugins]]repo='w0rp/ale'[[plugins]]repo='airblade/vim-gitgutter'hook_add='''setsigncolumn=yessetupdatetime=1000nnoremap[gitgutter]<Nop>nmap<C-h>[gitgutter]nmap[gitgutter]j<Plug>GitGutterNextHunknmap[gitgutter]k<Plug>GitGutterPrevHunknmap[gitgutter]u<Plug>GitGutterUndoHunk'''[[plugins]]repo='tpope/vim-fugitive'hook_add='''commandGst:GstatuscommandGdf:GdiffcommandGbl:Gblame'''[[plugins]]repo='Shougo/denite.nvim'hook_add='''nnoremap[denite]<Nop>nmap<C-d>[denite]nnoremap<silent>[denite]g:<C-u>Denitegrep-buffer-name=search-buffer-denite<CR>nnoremap<silent>[denite]r:<C-u>Denite-resume-buffer-name=search-buffer-denite<CR>nnoremap<silent>[denite]p:<C-u>Denitefile_rec<CR>calldenite#custom#option('default', 'prompt', '>')calldenite#custom#option('_', 'highlight_matched_range', 'None')calldenite#custom#option('_', 'highlight_matched_char', 'None')calldenite#custom#map('insert', "<Tab>", '<denite:move_to_next_line>')calldenite#custom#map('insert', "<S-Tab>", '<denite:move_to_previous_line>')calldenite#custom#map('insert', "<C-t>", '<denite:do_action:tabopen>')calldenite#custom#map('insert', "<C-v>", '<denite:do_action:vsplit>')calldenite#custom#map('normal', "v", '<denite:do_action:vsplit>')calldenite#custom#var('grep', 'command', ['pt', '--follow', '--nogroup', '--nocolor', '--hidden'])calldenite#custom#var('grep', 'default_opts', [])calldenite#custom#var('grep', 'recursive_opts', [])calldenite#custom#var('file_rec', 'command', ['pt', '--follow', '--nocolor', '--nogroup', '--hidden', '-g', ''])'''[[plugins]]repo='osyo-manga/vim-anzu'hook_add='''nmapn<Plug>(anzu-n-with-echo)nmapN<Plug>(anzu-N-with-echo)nmap*<Plug>(anzu-star)nmap# <Plug>(anzu-sharp)'''

dein_lazy.tomlファイルにもプラグイン名を書きます。

~/.config/nvim/dein_lazy.toml
[[plugins]]repo='Shougo/deoplete.nvim'on_event='InsertEnter'hook_add='''letg:deoplete#enable_at_startup=1inoremap<expr><Tab>pumvisible()?"\<DOWN>":"\<Tab>"inoremap<expr><S-Tab>pumvisible()?"\<UP>":"\<S-Tab>"'''

最後に Vim を起動して、ノーマルモードで以下のコマンドを実行しました。このコマンドでプラグインが読み込まれました。

:call dein#install()

プラグインのインストールを自動化

Vim プラグインを入れる度にインストールのコマンドを実行するのは面倒なので、 新しく入れたプラグインがあれば、Vim 起動時に自動でインストールするようにしました。

~/.config/nvim/init.vim
  if &compatible
    set nocompatible
  endif
  set runtimepath+=~/.cache/dein/repos/github.com/Shougo/dein.vim
  if dein#load_state('~/.cache/dein')
    call dein#begin('~/.cache/dein')
    call dein#load_toml('~/.config/nvim/dein.toml', {'lazy': 0})
    call dein#load_toml('~/.config/nvim/dein_lazy.toml', {'lazy': 1})
    call dein#end()
    call dein#save_state()
  endif
+ if dein#check_install()
+  call dein#install()
+ endif
  filetype plugin indent on
  syntax enable

プラグインごとに設定ファイルを分ける

プラグインごとにキーマップなどの設定を書いていくと、上記の dein.tomlのように見づらくなってしまいました。
そこで設定ファイルをプラグインごとに分けて書く方法をとりました。

まずは dein.tomldein_lazy.tomlを修正しました。

~/.config/nvim/dein.vim
  [[plugins]]
  repo = 'Shougo/dein.vim'

  [[plugins]]
  repo = 'tpope/vim-endwise'

  [[plugins]]
  repo = 'Townk/vim-autoclose'

  [[plugins]]
  repo = 'joshdick/onedark.vim'
  hook_add = '''
    colorscheme onedark
  '''

  [[plugins]]
  repo = 'w0rp/ale'

  [[plugins]]
  repo = 'airblade/vim-gitgutter'
  hook_add = '''
-   set signcolumn=yes
-   set updatetime=1000
-   nnoremap [gitgutter] <Nop>
-   nmap <C-h> [gitgutter]
-   nmap [gitgutter]j <Plug>GitGutterNextHunk
-   nmap [gitgutter]k <Plug>GitGutterPrevHunk
-   nmap [gitgutter]u <Plug>GitGutterUndoHunk
+   source ~/.config/nvim/plugins/gitgutter.vim
  '''

  [[plugins]]
  repo = 'tpope/vim-fugitive'
  hook_add = '''
-   command Gst :Gstatus
-   command Gdf :Gdiff
-   command Gbl :Gblame
+   source ~/.config/nvim/plugins/fugitive.vim
  '''

  [[plugins]]
  repo = 'Shougo/denite.nvim'
  hook_add = '''
-   nnoremap [denite] <Nop>
-   nmap <C-d> [denite]
-   nnoremap <silent> [denite]g :<C-u>Denite grep -buffer-name=search-buffer-denite<CR>
-   nnoremap <silent> [denite]r :<C-u>Denite -resume -buffer-name=search-buffer-denite<CR>
-   nnoremap <silent> [denite]p :<C-u>Denite file_rec<CR>
-   call denite#custom#option('default', 'prompt', '>')
-   call denite#custom#option('_', 'highlight_matched_range', 'None')
-   call denite#custom#option('_', 'highlight_matched_char', 'None')
-   call denite#custom#map('insert', "<Tab>", '<denite:move_to_next_line>')
-   call denite#custom#map('insert', "<S-Tab>", '<denite:move_to_previous_line>')
-   call denite#custom#map('insert', "<C-t>", '<denite:do_action:tabopen>')
-   call denite#custom#map('insert', "<C-v>", '<denite:do_action:vsplit>')
-   call denite#custom#map('normal', "v", '<denite:do_action:vsplit>')
-   call denite#custom#var('grep', 'command', ['pt', '--follow', '--nogroup', '--nocolor', '--hidden'])
-   call denite#custom#var('grep', 'default_opts', [])
-   call denite#custom#var('grep', 'recursive_opts', [])
-   call denite#custom#var('file_rec', 'command', ['pt', '--follow', '--nocolor', '--nogroup', '--hidden', '-g', ''])
+   source ~/.config/nvim/plugins/denite.vim
  '''

  [[plugins]]
  repo = 'osyo-manga/vim-anzu'
  hook_add = '''
-   nmap n <Plug>(anzu-n-with-echo)
-   nmap N <Plug>(anzu-N-with-echo)
-   nmap * <Plug>(anzu-star)
-   nmap # <Plug>(anzu-sharp)
+   source ~/.config/nvim/plugins/anzu.vim
  '''
~/.config/nvim/dein_lazy.toml
  [[plugins]]
  repo = 'Shougo/deoplete.nvim'
  on_event = 'InsertEnter'
  hook_add = '''
-   let g:deoplete#enable_at_startup = 1
-   inoremap <expr><Tab> pumvisible() ? "\<DOWN>" : "\<Tab>"
-   inoremap <expr><S-Tab> pumvisible() ? "\<UP>" : "\<S-Tab>"
+   source ~/.config/nvim/plugins/deoplete.vim
  '''

次にプラグインごとの設定ファイルを作成しました。

~/.config/nvim/plugins/anzu.vim
nmap n<Plug>(anzu-n-with-echo)
nmap N <Plug>(anzu-N-with-echo)
nmap * <Plug>(anzu-star)
nmap # <Plug>(anzu-sharp)
~/.config/nvim/plugins/denite.vim
nnoremap [denite]<Nop>
nmap <C-d>[denite]
nnoremap <silent>[denite]g:<C-u>Denite grep-buffer-name=search-buffer-denite<CR>
nnoremap <silent>[denite]r:<C-u>Denite -resume -buffer-name=search-buffer-denite<CR>
nnoremap <silent>[denite]p:<C-u>Denite file_rec<CR>call denite#custom#option('default','prompt','>')call denite#custom#option('_','highlight_matched_range','None')call denite#custom#option('_','highlight_matched_char','None')call denite#custom#map('insert',"<Tab>",'<denite:move_to_next_line>')call denite#custom#map('insert',"<S-Tab>",'<denite:move_to_previous_line>')call denite#custom#map('insert',"<C-t>",'<denite:do_action:tabopen>')call denite#custom#map('insert',"<C-v>",'<denite:do_action:vsplit>')call denite#custom#map('normal',"v",'<denite:do_action:vsplit>')call denite#custom#var('grep','command',['pt','--follow','--nogroup','--nocolor','--hidden'])call denite#custom#var('grep','default_opts',[])call denite#custom#var('grep','recursive_opts',[])call denite#custom#var('file_rec','command',['pt','--follow','--nocolor','--nogroup','--hidden','-g',''])
~/.config/nvim/plugins/deoplete.vim
letg:deoplete#enable_at_startup =1
inoremap <expr><Tab> pumvisible() ? "\<DOWN>":"\<Tab>"
inoremap <expr><S-Tab> pumvisible() ? "\<UP>":"\<S-Tab>"
~/.config/nvim/plugins/fugitive.vim
command Gst :Gstatus
command Gdf :Gdiff
command Gbl :Gblame
~/.config/nvim/plugins/gitgutter.vim
set signcolumn=yes
set updatetime=1000

nnoremap [gitgutter]<Nop>
nmap <C-h>[gitgutter]
nmap [gitgutter]j<Plug>GitGutterNextHunk
nmap [gitgutter]k<Plug>GitGutterPrevHunk
nmap [gitgutter]u<Plug>GitGutterUndoHunk

これでだいぶ見やすくなりました!
Neovim を使ってみたいという方は、ぜひ参考にしてください!

次回は私が現在使用しているプラグインの紹介と使い方についてまとめてみます!

注意: 私は denite.vim の file_recgrepthe_platinum_searcherというツールを使用しているので、そちらのインストールもよろしくお願いします

Vim保存コマンド覚書

$
0
0

:w ファイル名
(編集ファイルは元ファイルのまま保存)= 一時的なバックアップ

:saveas ファイル名 または :save ファイル名
(編集ファイルは新しいファイル保存)= 新規保存

vim エディタを開発環境用にカスタマイズしよう♪ ( CentOS7 )

$
0
0

vim エディタを開発環境用にカスタマイズするよ♪ ( CentOS7 )

  • Step ① : vim 用 syntax color file のダウンロード
    • Dark Visual Studio colorscheme for Vim
command
wget https://github.com/termNinja/vim-vstudio-theme/archive/master.zip
unzip master.zip
cd vim-vstudio-theme-master/
ls -R
.:
README.md  vstudioDark.vim
  • Step ② : vstudioDark.vim を, vim 設定フォルダに格納する
command
cp -vi --preserve=all ./vstudioDark.vim /usr/share/vim/vim74/colors/
ls /usr/share/vim/vim74/colors/vstudioDark.vim
----------------------------------------------
/usr/share/vim/vim74/colors/vstudioDark.vim
----------------------------------------------
  • Step ➂ : ホームディレクトリに, vim 設定ファイルを作成する
    • 開発環境用にカスタマイズする設定を書きます
    • 構文の色に先ほどダウンロードした, vstudioDark を使うように設定します
command
cd ~
touch .vimrc
vi ./.vimrc
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
" タブ幅をスペース 4 つ分にする
set tabstop=4
" タブを半角スペースで挿入する
set expandtab
" vim が自動で生成する ( 読み込み時など ) スペース 4 つ分にする
set shiftwidth=4
" 改行時などに自動インデントを行うようにする
set smartindent
" 空白文字の可視化
set list
"可視化した空白文字の詳細な表示設定
set listchars=eol:↓,tab:>\ ,extends:<
" 0 で始まる数値を, 8 進数として扱わないようにする
set nrformats-=octal
" ------------------------------------------------------------------------------
" 全角スペース・行末のスペース・タブの可視化
if has("syntax")
    " 構文ごとに文字色を変化させる
    syntax on

    " PODバグ対策
    syn sync fromstart

    function! ActivateInvisibleIndicator()
        " 下の行の" "は全角スペース
        syntax match InvisibleJISX0208Space " " display containedin=ALL
        highlight InvisibleJISX0208Space term=underline ctermbg=Blue guibg=darkgray gui=underline
        "syntax match InvisibleTrailedSpace "[ \t]\+$" display containedin=ALL
        "highlight InvisibleTrailedSpace term=underline ctermbg=Red guibg=NONE gui=undercurl guisp=darkorange
        "syntax match InvisibleTab "\t" display containedin=ALL
        "highlight InvisibleTab term=underline ctermbg=white gui=undercurl guisp=darkslategray
    endfunction

    augroup invisible
        autocmd! invisible
        autocmd BufNew,BufRead * call ActivateInvisibleIndicator()
    augroup END
endif
"-------------------------------------------------------------------------------
" colorscheme 項目は, autocmd こうもくより下側に記述されていなければならない
" エラーがでてしまう
colorscheme vstudioDark
↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

vi インサートモードを抜け, wq で書き込んで終了します。
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

上記に書かれている, この中が記述する設定です。

↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
  • Step ④ : 動作確認
    • vim ./.vimrc で以下に示す画像の様になれば ok
    • ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    • 2018y07m22d_190811812.png
    • ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    • 今回設定したカスタマイズ vim 設定を他のユーザでも引き継ぎたい場合は下記のような手順で行えば良い。
    • ユーザ名などは, 適宜, 各自の環境に置き換えて行って下さい。
command
cp ./.vimrc ../home/lpicstudy
chown -R lpicstudy. ../home/lpicstudy
( ここでは ) コピー元は, 先ほど作成した, .vimrc のフォルダを指定しています。

Vimライクなキーバインドで動くライフゲームを作った

$
0
0

Vimライクといってもただ hjkl で動かせるよってだけなので、Vimmerの方々に怒られると思いますが…
勢いで作った。

https://github.com/penguing27/lifevim

モチベーション

  • コンソール画面で、画面をクリアして何かが動く、みたいなソフトの仕組みを知りたかった (それこそVimみたいな)
  • ライフゲームの動画を眺めていて、作ってみたくなった。

コンソール画面制御

※ 大事なのはこの2つ (Cの場合)

  • termios
    • tcgetattr()で現在のターミナル情報を保存しておいて、tcsetattr()で使いたいターミナルへ変更する。
    • エンターキーを押さなくてもキーを押した瞬間に出力される「非カノニカルモード」にするとか。アプリを終了させる前にちゃんと設定を戻さなければ、その後も変なことになるので注意が必要。
  • エスケープシーケンス (printf)
    • 画面を制御する制御文字を標準出力へ出力することで、画面をクリアする、カーソルを移動させる、みたいな処理が可能。
printf("\033[2J");// 画面をクリアするprintf("\033[%d;%dH",y,x);// カーソル位置を移動する

結果物

Macのターミナルでは動くことを確認した。

https://github.com/penguing27/lifevim

  • 操作方法
    • h,j,k,l: カーソル移動
    • 0,$,gg,G,M: 一番上へ移動したりとか
    • v: ライフを作ったり消したり
    • Space: 1ステップ進める
    • Enter: 膠着状態になるまで自動で進める
    • :q: 終了

output.gif

もうちょっとやりたいこと

  • Shift+vCtrl+vで行単位や矩形単位でライフを作ったり消したりできるようにしたい
  • マクロとか使えるようにするとおもしろそう
  • コマンドラインモードが弱すぎるのでちゃんと構文解析とかやりたい

TODO管理をvimとiPhoneで手軽にやってみたった

$
0
0

Summary

todo管理をvimiPhoneでやってみた
todoのデーター形式は todo.txt

motivation

toodledoでの柔軟なタスク管理と、iPhone's reminders.appでの手軽なタスク管理をもっと手軽にやってみたかった

手軽にフォルダ管理・サブフォルダ管理がしたい
→ プロジェクトとしてのタスク管理

手軽に日付からの時間帯コンテキストで管理がしたい
→ 実行フェーズでのタスク管理

手軽にiPhoneで上記のタスク管理(特に実行フェーズでのタスク管理)をしたい
手軽にvimで上記のタスク管理がしたい

todo.txt format とは?

plain text です
タスクを一行で表します
+fooで foo project
@barで bar context

see: todo.txt format

工夫したところ

+foo ++barでサブフォルダを表現するところ
@thincaさんの vim-parteditを利用することでいい感じに( parteditを使うことがfilterになっている。そのおかげで ソート by folding marker が柔軟になる)

こんな感じ

todo.gif

こんな感じ2

まずはフォルダ+表示

Screen Shot 2018-07-23 at 3.21.10.png

たとえば日付due:でフォルディング表示。日付の上でスペース2回押す。

Screen Shot 2018-07-23 at 3.21.23.png

その日付だけのデーターが別窓で開く

Screen Shot 2018-07-23 at 3.21.36.png

ここでコンテキスト(この場合時間帯)でフォルディング表示。これで今日、何をすればいいかのタスク表示をゲッツ

Screen Shot 2018-07-23 at 3.21.48.png

タスクをdoneしてみる

Screen Shot 2018-07-23 at 3.22.04.png

こんな感じ3

iPhoneでも同じような表示をしてみる

IMG_7431.PNG

Vimのコード

Comming soon
あと2週間ほど使ってみてよさげだったらリンク貼りますっ

iPhone アプリ

SwiftoDoというのを使ってますっ

Vimでshift-jisからutf-8へ変換

$
0
0

Vim でwindowsで書かれたファイル(shift-jis)を開くと文字化けする。
これをutf-8に変換する。
まずは普通にVimでファイルを開く。コマンドモードで以下のコマンドを順番に入力する。

:e++enc=shift-jis
:set fenc=utf-8:e++f=unix
:%s/^M//g

^MはCtrl+V + Ctrl+M

Neovim + Ale での開発時に recompile() が効かない

$
0
0

Neovim + Ale で開発環境を整えたのはいいものの、iex -S mixで起動したREPLで recompile()が効かなかった。
ゴリ押し気味の解決策だが一応動いてくれているのでメモしておきます。

解決策

https://github.com/phoenixframework/phoenix/issues/1165
全部ここに書いてあるし下のスニペットは丸コピなので詳しくはこちらを参照してください。

どうやらlint時にコンパイルが行われることによって、recompile()時には既にコンパイル済と認識されてしまうようです。
対策として、ALELintPostが呼ばれた後に一度aleを無効にしてファイルを保存、その後再度aleを有効とすることによって、「lint時のコンパイル後に編集した状態」をつくっています。

~/.config/nvim/ftplugin/elixir.vim
augroup AleGroup
  autocmd!
  autocmd User ALELintPost call TouchOpenFile()
augroup END

func! TouchOpenFile()letg:ale_enabled=0
  sleep 800mwletg:ale_enabled=1
endfunc

.vimrcに書いたexpandtabが効かない

自分の.vimrcを晒してみる

$
0
0

きっかけ

これといったきっかけは実はないのですが、

  • そういえばvimについてあまり投稿してないかもと思ったのと、
  • vimについてよりよいフィードバックがもらえるかもと思ったのと、
  • 友人にvimについて聞かれたついでに

というようなきっかけです。

今回の投稿の内容は、「自分の.vimrcを晒してみる」です。
.vimrcはvimの操作感に大きくかかわるところなので、個人差が出やすいため、
「やっぱりここはこうだよね」とか「ここはこうじゃないだろー」とかいろんなな意見があると思いますが、
.vimrcについての意見であればアンチコメントだろうと大歓迎です。

.vimrcの中身

" ##############################################################表示系##############################################################


" 編集中のファイル名を表示
set title

" コードの色分け
syntax on

" 行番号を表示
set number

" 現在の行を強調表示
" set cursorline

" 現在の列を強調表示(縦)
" set cursorcolumn

" 行末の1文字先までカーソルを移動できるように
set virtualedit=onemore

" インデントはスマートインデント
set smartindent

" ビープ音を可視化
set visualbell

" 括弧入力時の対応する括弧を表示
set showmatch

" ステータスラインを常に表示
set laststatus=2

" コマンドラインの補完
set wildmode=list:longest

" 不可視文字を可視化(タブが「▸-」と表示される)
set list listchars=tab:\▸\-

" Tab文字を半角スペースにする
set expandtab

" 行頭以外のTab文字の表示幅(スペースいくつ分)
set tabstop=2

" 行頭でのTab文字の表示幅
set shiftwidth=2

" 入力中のコマンドをステータスに表示す
set showcmd


" ##############################################################検索系##############################################################


" 検索文字列が小文字の場合は大文字小文字を区別なく検索する
set ignorecase

" 検索文字列に大文字が含まれている場合は区別して検索する
set smartcase

" 検索文字列入力時に順次対象文字列にヒットさせる
set incsearch

" 検索時に最後まで行ったら最初に戻る
set wrapscan

" 検索語をハイライト表示
set hlsearch

" ESC連打でハイライト解除
nmap <Esc><Esc> :nohlsearch<CR><Esc>


" ##############################################################移動系##############################################################


" explolerを開く
nnoremap q :E<Enter>

" ctagジャンプの時に新規タブで開く
nnoremap <F3> :<C-u>tab stj <C-R>=expand('<cword>')<CR><CR>

" ctagジャンプの時に定義元が複数あった場合は一覧表示
nnoremap <C-]> g<C-]>


" ##############################################################入力系##############################################################


" visualモード時に複数行をまとめてインデント
vnoremap > >gv
vnoremap < <gv

" insertモード時に閉じ括弧の補完
inoremap {<Enter> {}
inoremap [<Enter> []
inoremap (<Enter> ()

" insertモード時に行頭(^)と行末($)にカーソル移動
inoremap <C-e> <Esc>$a
inoremap <C-a> <Esc>^a

" normalモード時に行頭(^)と行末($)にカーソル移動
noremap <C-e> <Esc>$
noremap <C-a> <Esc>^

" insertモード時のカーソル移動
inoremap <c-h> <Left>
inoremap <c-j> <Down>
inoremap <c-k> <Up>
inoremap <c-l> <Right>

" ##############################################################その他##############################################################

"文字コードをUFT-8に設定
set fenc=utf-8

" バックアップファイルを作らない
set nobackup

" スワップファイルを作らない
set noswapfile

" 編集中のファイルが変更されたら自動で読み直す
set autoread

" バッファが編集中でもその他のファイルを開けるように
set hidden

" 入力中のコマンドをステータスに表示する
set showcmd

" クリップボードにコピーするオプション?
set clipboard=unnamed,autoselect

こちらにも情報は公開(自分がどの環境でもすぐに使えるように保存)してあるので、ファイルならgit cloneさせろよ、とかいう方は下記を参照ください。
GitHub - godai0505

さいごに

これが僕がいつも使っている.vimrcの中身ですが、もしこんなのも使えるよ!というのがあれば、ご教示いただけると泣いて喜びますので、よろしくお願いします。

VimmerがCloudFormationを書くなら ale + cfn-python-lint が便利!

$
0
0

Vimmer ですか?
AWS CloudFormation を書いてますか?
では alecfn-python-lintを使いましょう :thumbsup:

どう便利なの?

見た方が早いと思うので、試しに壊れたCloudFormationテンプレートファイルを vim で開いてみます。

AWSTemplateFormatVersion:2010-09-09Description:Sample template for ale.vim and cfn-python-lintParameters:# このパラメータは使われてないThisIsNotUsed:Type:StringResources:EC2Instance:Type:'AWS::EC2::Instance'# 必須パラメータが未定義Properties:# AvailabilityZone のハードコーディングは避けるべし#   ≒  Parameterや Fn::GetAZs を使おうAvailabilityZone:'us-west-2a'Tags:-Key:Name# 未定義パラメータを使用しているValue:!Sub"${UndefinedParameter}"Outputs:Sample:# 未定義リソースを使用しているValue:!RefNoExistResoure

私の vim だと次のような表示になります。

image.png

>>とか --のある行にカーソルを合わせると vim のステータスラインにメッセージが表示されます。

image.png
image.png

ImageIdLaunchTemplateが必須だよ、と教えてくれています。ありがとう。

ale とは

aleは Vim(8.0以上)/NeoVim 向けの Asynchronous Lint Engine プラグインです。
rubocopeslintなど各種 Linter と連携して Lint の結果を Vim 上に表示することができます。

似たプラグインに syntasticがありますが、 alevim8jobに対応しているので非同期処理される・neovimにも対応している・vadorによるテストが充実している、などと後発らしい特徴があります。
同じく後発のプラグインとして neomakeもあるようですが、私は aleしか使ったことがないので詳しく知りません...。

cfn-python-lint とは

cfn-python-lintawslabsで作られているPython製のCloudFormation Linter です。 2018/04 に公開されたばかりのできたてホヤホヤです。

既存の Linter としては、 NodeJS製の [cfn-lint](https://github.com/martysweet/cfn-lint)がありましたが、こちらは出力結果がとても人間に優しく、そして機械には優しくない(パースしづらい)ものでした。

cfn-python-lintansible-lintを参考にして実装されているようで 1機械にも優しい出力ができるようになっています。

設定方法

私の環境

筆者の環境は次の通りです。

  • OS: macOs HighSierra 10.13.5
  • Vim: 8.1.10 (macvim)
  • Python: 3.6.5
    • cfn-lint: 0.4.1

[python] cfn-python-lint をインストールする

cfn-python-lintpipでインストールできます。
GitHub上のリポジトリは cfn-python-lintだけど pipでインストールする時は cfn-lintなことに注意です。2

pip install cfn-lint

[vim] ale をインストールする

aleをインストールします。
例えば dein.vimでプラグインを管理しているなら、

call dein#add("w0rp/ale")

といった感じです。
私は TOML を利用しているので、

[[plugins]]repo="w0rp/ale"

という具合です。

[vim] filetype=cloudformation を設定する

cfn-python-lintaleで利用するには filetypecloudformationにする必要があります。
filetypecloudformationなら aleは自動的に cfn-python-lintを使います。

私の場合は、 xxxx.template.yamlというファイル名にすることが多いので ~/.vim/ftdetect/cloudformation.vimに次のように設定しています。

auBufRead,BufNewFile *.template.yaml set ft=cloudformation.yaml

yamlをベースにしつつ fieltypecloudformationにすることで、 yamlのシンタックスハイライトを利用しつつ alecfn-python-lintを使うことができるようになります。

備考

ちなみに alecfn-python-lintを使えるようにしたのは私です :smirk:
ちなみにその直後、 cfn-python-lintを最新版にすると動かないからと修正されました :innocent:


  1. https://github.com/awslabs/cfn-python-lint#credit 

  2. コマンド名も cfn-lintなのだけど Node.js製の cfn-lintと被せたのはわざとなのかどうなのか... 


vim-plugをセットアップしたらgit commitしたときにE492: Not an editor commandって怒られるようになっちゃった

$
0
0

Gitが使うeditorを(viでなく)vimに設定すればよい。

  1. GIT_EDITOR環境変数
  2. core.editor設定
  3. VISUAL環境変数
  4. EDITOR環境変数
  5. コンパイル時の設定(通常vi)

の優先順位で利用されるエディタが決定する(git-var(1))ので、何も設定していなければ(大抵の場合)viが使用される。
vimが使われるように設定しておこう。例えば、次のように:

git config --global core.editor $(which vim)

私が使う Vim プラグインまとめ

$
0
0

はじめに

Neovim の設定を一年以上サボっていたので、久しぶりに整理しました。
入れているのに全く使っていなかったプラグインや、上手く活用できていなかったプラグインがあることに気づき、改めてプラグインの使い方をおさらいしてみました。

※ 前回書いた記事の続きとなっておりますので、そちらもご覧ください。
=> Neovim の設定を綺麗に整理してみた

やったこと

  • Vim プラグインの使用方法の調査
  • キーマッピング

環境

  • macOS Sierra: v10.12.6
  • Neovim: v0.3.0
  • Python2: v2.7.10
  • Python3: v3.7.0
  • Ruby: v2.4.4p296
  • Node.js: v10.6.0

プラグイン紹介

tpope/vim-endwise

do ブロック や def、 if 文などを作成するときに end を自動で入力してくれるプラグインです。

デモンストレーション

vim-endwise.gif

Townk/vim-autoclose

括弧の自動で補完してくれるプラグインです。
" を打つと "" に自動補完してくれますし、 ( を打つと () に自走補完してくれます。

デモンストレーション

vim-autoclose.gif

joshdick/onedark.vim

説明

Atom の One Dark というカラースキームにインスパイアされて作られた Vim / Neovim のカラースキームです。
目に優しい感じが好きで愛用しています。

w0rp/ale

説明

非同期で syntax チェックを行うプラグインです。
Neovim や Vim8 で非同期な操作が可能になったことで、このプラグインがよく使われるようになったそうです。

airblade/vim-gitgutter

説明

Gitで管理しているファイルを編集する際に、差分を表現する記号を左端に表示してくれるプラグインです。
~が変更があった行、+が追加行、-が削除された行であることを示しています。

それだけではなく、差分がある行にすぐに移動できたり、差分を元に戻すこともできます。

デモンストレーション

vim-gitgutter.gif

設定ファイル

~/.config/nvim/plugins/gitgutter.vim
set signcolumn=yes
set updatetime=1000

nnoremap [gitgutter]<Nop>
nmap <C-h>[gitgutter]
nmap [gitgutter]j<Plug>GitGutterNextHunk
nmap [gitgutter]k<Plug>GitGutterPrevHunk
nmap [gitgutter]u<Plug>GitGutterUndoHunk

tpope/vim-fugitive

説明

vim から git を呼べるようにするラッパープラグインです。
fugitive を使うと git を操作するためにいちいち vim から抜けなくてよくなります。

中でも私は Gblame を愛用しています。
Gblame で開いたウィンドウ内で O を打つと、コミットの内容まで表示してくれます。

デモンストレーション

git-fugitive.gif

設定ファイル

~/.config/nvim/plugins/fugitive.vim
command Gst :Gstatus
command Gdf :Gdiff
command Gbl :Gblame

Shougo/denite.nvim

説明

vim 用の統合ユーザインターフェースを実現してくれるプラグインです。
様々なデータを同じインタフェースで操作することができるようになります。

例えば、ファイルをファイル名で絞り込んで検索できたり、文字を grep して検索することもできます。また検索したファイルを同じインターフェースで開いたりすることもできます。

デモンストレーション

denite.gif

設定ファイル

~/.config/nvim/plugins/denite.vim
nnoremap [denite]<Nop>
nmap <C-d>[denite]
nnoremap <silent>[denite]g:<C-u>Denite grep-buffer-name=search-buffer-denite<CR>
nnoremap <silent>[denite]r:<C-u>Denite -resume -buffer-name=search-buffer-denite<CR>
nnoremap <silent>[denite]p:<C-u>Denite file_rec<CR>call denite#custom#option('default','prompt','>')call denite#custom#option('_','highlight_matched_range','None')call denite#custom#option('_','highlight_matched_char','None')call denite#custom#map('insert',"<Tab>",'<denite:move_to_next_line>')call denite#custom#map('insert',"<S-Tab>",'<denite:move_to_previous_line>')call denite#custom#map('insert',"<C-t>",'<denite:do_action:tabopen>')call denite#custom#map('insert',"<C-v>",'<denite:do_action:vsplit>')call denite#custom#map('normal',"v",'<denite:do_action:vsplit>')call denite#custom#var('grep','command',['pt','--follow','--nogroup','--nocolor','--hidden'])call denite#custom#var('grep','default_opts',[])call denite#custom#var('grep','recursive_opts',[])call denite#custom#var('file_rec','command',['pt','--follow','--nocolor','--nogroup','--hidden','-g',''])

補足

私は高速 grep ツールとして the_platinum_searcherを採用しています。
理由は the_silver_searcherhighwayよりも速いという記事をよく見かけるからです。

osyo-manga/vim-anzu

説明

検索時にマッチした個数とそれが何番目であるかの情報を表示してくれるプラグインです。
今までマッチした個数や何番目であるかが分からず、 n を押しっぱなしで迷子になっていたので、非常に助かってます。

デモンストレーション

anzu.gif

設定ファイル

~/.config/nvim/plugins/anzu.vim
nmap n<Plug>(anzu-n-with-echo)
nmap N <Plug>(anzu-N-with-echo)
nmap * <Plug>(anzu-star)
nmap # <Plug>(anzu-sharp)

Shougo/deoplete.nvim

説明

deoplete は拡張可能で非同期の補完フレームワークを提供してくれる Vim プラグインです。
別途補完ソース用のプラグインを追加することで、補完機能を強化することもできます。

デモンストレーション

deoplete.gif

設定ファイル

~/.config/nvim/plugins/deoplete.vim
letg:deoplete#enable_at_startup =1
inoremap <expr><Tab> pumvisible() ? "\<DOWN>":"\<Tab>"
inoremap <expr><S-Tab> pumvisible() ? "\<UP>":"\<S-Tab>"

MSYS2 +α - 構築手順・備忘録

$
0
0

MSYS2のインストール、設定方法について書かれた様々なサイトを参考にしながら
環境構築を試してきましたが、pacmanのバージョンの違いなどによって、意外とつまずく点もあったため、
自分用の構築手順をまとめて記載していこうと思います。
MSYS2のインストールやパッケージ更新以外は各設定の備忘録になります。

  • MSYS2のインストール
  • pacmanによるパッケージ更新&追加
  • minttyの設定
  • Vimの設定
  • aliasの設定
  • functionsの設定

1.MSYS2のインストール

まずは↓からインストーラをダウンロードしインストールします。
MSYS2 installer
"x86_64" と書かれているほうは64bitです。
※ここでは64bitをインストールして設定していきます。

2.pacmanによるパッケージ更新&追加

まずはパッケージ管理の「pacman」のバージョンを確認します。

$ pacman -Sl | grep 'pacman '
msys pacman 5.0.1-1 [インストール済み]

更新方法等はpacmanのバージョンによって手順が異なるようですが、
この投稿では5.0.1-1または5.0.1.6403以降の場合で記載します。

2-1.更新

下記のコマンドで、
リポジトリとローカルパッケージデータベースとの同期およびアップグレード(ダウングレード含む)
を実行します。

pacman -Syuu

もし、下記の警告メッセージが表示された場合は
MSYS2を再起動し、再度更新のコマンドを実行します。
上記を繰り返し、更新するものがなくなれば警告メッセージは表示されなくなります。

警告: terminate MSYS2 without returning to shell and check for updates again
警告: for example close your terminal window instead of calling exit

2-2.追加

パッケージの更新が終われば、次は必要なパッケージの追加です。
パッケージのインストールは下記のコマンドです。

pacman -S [パッケージ名]

自分の環境には下記のパッケージをインストールしました。

pacman -S base-devel
pacman -S msys2-devel
pacman -S mingw-w64-i686-toolchain
pacman -S mingw-w64-x86_64-toolchain
pacman -S mingw-w64-x86_64-boost
pacman -S vim
pacman -S openssh
pacman -S sshpass
pacman -S git
pacman -S unzip
pacman -S rsync
pacman -S tmux

// 一括インストールする場合
pacman -S base-devel msys2-devel mingw-w64-i686-toolchain mingw-w64-x86_64-toolchain mingw-w64-x86_64-boost vim openssh sshpass git unzip rsync tmux

3.minttyの設定

minttyはターミナルエミュレータです。
設定ファイルは「.minttyrc」になります。

# mintty Settings
BoldAsFont=no
FontHeight=11

Columns=110
Rows=40
Locale=ja_JP
Charset=UTF-8
Term=xterm-256color

CopyOnSelect=yes
RightClickAction=paste
BackspaceSendsBS=yes

IMECursorColour=255,0,0

4.Vimの設定

Vimはテキストエディタです。
設定ファイルは「.vimrc」になります。

" Vim Settings

"カラースキーム
syntax on
colorscheme monokai
set t_Co=256

" setting
" 文字コードをUTF-8に設定
set fenc=utf-8
" バックアップファイルを作らない
set nobackup
" スワップファイルを作らない
set noswapfile
" 編集中のファイルが変更されたら自動で読みなおす
set autoread
" バッファが編集中でもその他のファイルを開けるように
set hidden
" 入力中のコマンドをステータスに表示する
set showcmd
" Backspaceによる削除を設定
set backspace=indent,eol,start

" 見た目系
" 行番号を表示
set number
" 行末の一文字先までカーソルを移動できるように
set virtualedit=onemore
" インデントはスマートインデント
" set smartindent
" 改行時に前の行のインデントを継続する
set autoindent
" 括弧入力時の対応する括弧を表示
set showmatch
" ステータスラインを常に表示
set laststatus=2
" 現在の行を強調表示
set cursorline
" コマンドラインの補完
set wildmode=list:longest
" 折り返し時に表示行単位での移動できるようにする
nnoremap j gj
nnoremap k gk
" 行頭、行末移動
nnoremap <S-h> 0
nnoremap <S-l> $
" ノーマルモード時にRetunキーで改行
nnoremap <CR> A<CR><ESC>
" nnoremap ; :
" nnoremap : ;


" Tab系
" 行頭以外のTab文字の表示幅(スペースいくつ分)
" set tabstop=4
" 行頭でのTab文字の表示幅
set shiftwidth=4
" 行末の1文字先までカーソルを移動できるように
set virtualedit=onemore


" 検索系
" 検索文字列入力時に順次対象文字列にヒットさせる
set incsearch
" 検索文字列が小文字の場合は大文字小文字を区別なく検索する
set ignorecase
" 検索文字列に大文字が含まれている場合は区別して検索する
set smartcase
" 検索語をハイライト表示
set hlsearch
" ESC連打でハイライト解除
nnoremap <Esc><Esc> :nohlsearch<CR><Esc>
" 検索時に何個マッチしたかを表示する
nnoremap <expr> / _(":%s/<Cursor>/&/gn")


" 保存時に行末の空白を除去する
" autocmd BufWritePre * :%s/\s\+$//ge
" 保存時にtabを2スペースに変換する
" autocmd BufWritePre * :%s/\t/    /ge

"hi IndentGuidesOdd  ctermbg=black
"hi IndentGuidesEven ctermbg=darkgrey

" Ctrl+nでディレクトリ構造を表示
" nnoremap <C-n> :NERDTreeToggle<Enter>


" http://inari.hatenablog.com/entry/2014/05/05/231307
""""""""""""""""""""""""""""""
" 全角スペースの表示
"""""""""""""""""""""""""""""
function! ZenkakuSpace()
  highlight ZenkakuSpace cterm=underline ctermfg=lightblue guibg=darkgray
endfunction

if has('syntax')
  augroup ZenkakuSpace
    autocmd!
    autocmd ColorScheme * call ZenkakuSpace()
    autocmd VimEnter,WinEnter,BufRead * let w:m1=matchadd('ZenkakuSpace', ' ')
  augroup END
  call ZenkakuSpace()
endif
""""""""""""""""""""""""""""""


" https://sites.google.com/site/fudist/Home/vim-nihongo-ban/-vimrc-sample
""""""""""""""""""""""""""""""
" 挿入モード時、ステータスラインの色を変更
""""""""""""""""""""""""""""""
let g:hi_insert = 'highlight StatusLine guifg=darkblue guibg=darkyellow gui=none ctermfg=white ctermbg=darkgray cterm=none'

if has('syntax')
  augroup InsertHook
    autocmd!
    autocmd InsertEnter * call s:StatusLine('Enter')
    autocmd InsertLeave * call s:StatusLine('Leave')
  augroup END
endif

let s:slhlcmd = ''
function! s:StatusLine(mode)
  if a:mode == 'Enter'
    silent! let s:slhlcmd = 'highlight ' . s:GetHighlight('StatusLine')
    silent exec g:hi_insert
  else
    highlight clear StatusLine
    silent exec s:slhlcmd
  endif
endfunction

function! s:GetHighlight(hi)
  redir => hl
  exec 'highlight '.a:hi
  redir END
  let hl = substitute(hl, '[\r\n]', '', 'g')
  let hl = substitute(hl, 'xxx', '', '')
  return hl
endfunction
"""""""""""""""""""""""""""""

5.aliasの設定

aliasはいわゆる「別名」のことで、
コマンドやオプションの組み合わせなどに別名を付けることで
コマンド入力の代わりに別名で実行することが可能になります。
設定ファイルは「.bash_aliases」になります。

# lloading message
echo 'load file: .bash_aliases'

alias ls='ls --color=auto --show-control-chars --time-style=long-iso -FH'
alias al='ls -al --color=auto --show-control-chars --time-style=long-iso -FH'
alias less='less -XFN'
alias vi='vim -u NONE --noplugin '

# 再起動
alias reboot='exec $SHELL -l'

alias grep='grep --color'

6.functionの設定

関数を定義します。
設定ファイルは「.bash_function」になります。

# Functions
echo 'load file: .bash_function'

# Functions for MSYS2 bash

# charset convert
function wincmd() {
    CMD=$1
    shift
    $CMD $* 2>&1 | iconv -f cp932 -t utf-8
}

# Windows Command
alias ipconfig='wincmd ipconfig'
alias java='wincmd java'
alias composer='wincmd composer'
alias php='wincmd php'

# winpty command
alias mysql='winpty mysql'
alias netstat='winpty netstat'
alias netsh='winpty netsh'

# pingのコマンド名混同防止対策で絶対パス指定
alias ping='wincmd /c/windows/system32/ping'

# package list
function plist()
{
    pacman -Sl | grep 'mingw64'
}

# package information
function pinfo()
{
    pacman -Sii "mingw-w64-x86_64-$1"
}

# package install
function pinst()
{
    pacman -S "mingw-w64-x86_64-$1"
}

# package uninstall
function puninst()
{
    pacman -Rs "mingw-w64-x86_64-$1"
}

# others
function snow()
{
    clear;while :;do echo $LINES $COLUMNS $(($RANDOM%$COLUMNS));sleep 0.1;done|gawk '{a[$3]=0;for(x in a) {o=a[x];a[x]=a[x]+1;printf "\033[%s;%sH ",o,x;printf "\033[%s;%sH*\033[0;0H",a[x],x;}}'
}

function matrix()
{
    echo -e "\e[1;40m" ; clear ; while :; do echo $LINES $COLUMNS $(( $RANDOM % $COLUMNS)) $(( $RANDOM % 72 )) ;sleep 0.05; done|gawk '{ letters="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789@#$%^&*()"; c=$4; letter=substr(letters,c,1);a[$3]=0;for (x in a) {o=a[x];a[x]=a[x]+1; printf "\033[%s;%sH\033[2;32m%s",o,x,letter; printf "\033[%s;%sH\033[1;37m%s\033[0;0H",a[x],x,letter;if (a[x] >= $1) { a[x]=0; } }}'
}

Karabiner-ElementsでViカーソル移動(Ctrl+hjkl)+範囲選択(Shift)を使えるようにする

$
0
0

概要

  • OSがSierraになってからKarabinerが使えなくなって英かなを使っていた
  • Karabiner-Elementsに出戻りしようとしたときにShift+hjklによる範囲選択が出来なかったので戻れなかった
  • いつの間にか使えることを発見してやっと出戻り出来たメモ

方法

Complex ModificationsのAdd ruleでルールを選択する画面に遷移し、以下を選択する。

スクリーンショット 2018-07-30 13.49.57.png

fzfを使用してgit grepを行う

$
0
0

やりたいこと

  • Git grepをvimから呼び出す
  • fzfを使用して検索されたファイルの該当行に飛ぶ

準備

fzf, fzf.vimを入れておきしょう。

https://qiita.com/hisawa/items/fc5300a526cb926aef08

環境は

  • Mac 10.12.6
  • Custom Version 8.0.1633 (KaoriYa 20180324)

やり方

下記を.vimrcに追記して読み込む。
:Gitgrep hogehogeで使用できます。

.vimrc
command! -bang -nargs=+ Gitgrep call fzf#run({
      \ 'source': 'git grep -n -I -i <args>',
      \ 'sink': function('s:line_handler'),
      \ 'dir': s:get_git_base_path(expand("%:p:h")),
      \ 'up': '~40%',
      \ 'options': '+m'
      \ })

" .gitディレクトリがあるパスを取得する
function! s:get_git_base_path(current_dir) abort
  if isdirectory(expand(a:current_dir . '/.git'))
    return a:current_dir
  else
    let sp_dir = split(a:current_dir, '/')
    call remove(sp_dir, -1)
    return s:get_git_base_path('/' . join(sp_dir, '/'))
  endif
endfunction

" 行が選択された時の動き
function! s:line_handler(line)
  let keys = split(a:line, ':')
  " path
  exec 'e '. keys[0]
  " line
  exec keys[1]

  normal! ^zz
endfunction

できなかったこと

  • .gitファイルがなかった場合のエラー処理
  • git grep <pattern> <path>のpath部分の指定

いい方法があれば教えてください。
https://gist.github.com/hsawaji/42a604c955929d26debc44d70885b4f7

参考

https://github.com/junegunn/fzf/wiki/Examples-(vim)
https://gist.github.com/drasill/adb258e1363a22e6e433

Viewing all 5727 articles
Browse latest View live


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