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

denite.nvim で grep -> qfreplace をやる

$
0
0

はじめに

いつもは丁寧に記事を書くのだが、今回はさっと書きます。

対象

  • vim/neovim を使っている
  • unite.vim を知ってる
  • 今は denite.nvim 使ってる

内容

unite.vim では以下の事ができたが、denite.nvim ではできなかった。

  • Unite grepする
  • 候補を選択する
  • replace-action を起動する(thinca/vim-qfreplace が必要)
  • 置換バッファが開くので、編集して保存
  • 複数ファイルにまたがった置換を行うことができる

denite.nvim は速度に優れているので、grep みたいなことはとても得意。
でも、grep 結果を一括置換できないので、うーん。と思っていた。

しかし、先日 denite.nvim に custom-action が搭載された。
これ、自分で qfreplace 叩けばできるんじゃないの?
unite.vim の replace-action を見てみたら、めちゃ簡単なコードだったので書いてみた。

実装

.vimrc

  if dein#tap('denite.nvim') && dein#tap('vim-qfreplace')
    function! MyDeniteReplace(context)
      let qflist = []
      for target in a:context['targets']
        if !has_key(target, 'action__path') | continue | endif
        if !has_key(target, 'action__line') | continue | endif
        if !has_key(target, 'action__text') | continue | endif

        call add(qflist, {
              \ 'filename': target['action__path'],
              \ 'lnum': target['action__line'],
              \ 'text': target['action__text']
              \ })
      endfor
      call setqflist(qflist)
      call qfreplace#start('')
    endfunction
    call denite#custom#action('file', 'qfreplace', function('MyDeniteReplace'))
  endif

※ 行儀悪い部分もあるが許して(g:, l: つけてないとか)

おわりに

プラグイン化しないの?とか言われそうなので、そこだけ言っておくとこんな簡単なコードをプラグインにしてもなあと思ったのと、このコードは 2 種類の plugin に依存したコードなので、みんな vimrc に書けばいいんじゃないのと思ったので、特に予定はないです。


webエンジニアに役立つ小技集 vimmerならなお良い

$
0
0

随時追加する所存。

Vagrant

どこでもコマンド打てる

vagrantコマンドの後にidを指定すれば作業ディレクトリに関係なくvmを操作できる

Ex: vagrant halt 9999999

VMのidは global-statusコマンドで表示できる

$ vagrant global-status
id       name    provider   state    directory
-------------------------------------------------------------------------------------
6038658  default virtualbox poweroff /Users/hoge/Workspace/tano-c
99b12cf  default virtualbox running  /Users/hoge/Workspace/running-project
$
$ vagrant halt 99b12cf==> default: Attempting graceful shutdown of VM...

vim

ファイル開いて文字化けした時にエンコーディングに対応する

:e ++enc=euc_jp

CSS

メニューとかの罫線を border-topで引くとき

PIYOのリンクの塊だけに

<divclass="menu"><divclass="group"><ahref="/hoge1">HOGE1</a><ahref="/hoge2">HOGE2</a></div><divclass="group"><ahref="/piyo">PIYO</a><ahref="/piyo">PIYO</a></div><divclass="group"><ahref="/piyo">PIYO</a><ahref="/piyo">PIYO</a></div></div>
.menu{.group{&:nth-child(n+2){border-top:solid1pxgray;}}}

前はこうしてた

.menu{.group{border-top:solid1pxgray;&:first-child{border-top:none;}}}

私が本当に使っているVimのコマンド一覧

$
0
0

はじめに

  • 私はVim派です。
  • Linuxサーバは、ほぼCentOSを使ってます。
  • ログ調査とかシェル書いたりとかに使ってます。
  • ランキング形式にしたいとおもいます。
  • 私は以下くらいのコマンドしか使えません。というか使いません。

ランキング

第一位

困ったらescキー押しとけってことだ。

esc

第二位

困ったらescキー押して、q!でそっとファイルを閉じるんだ。

q!

第三位

ここぞというときに保存するんだ。癖で閉じちゃうけど「w」のほうがオススメ。

w or wq

以下同列

とりあえず何か書いてみよう。

i

削除、削除、削除

dd

ぜーんぶ消しちゃえ

%d

全部ペーストしたい

a

の後に

Command(Ctrl) + v

一つ前の状態に戻したい

u

先頭行に飛びたい

gg

最終行に飛びたい

G

行番号に飛びたい

:(行番号)

最終行に飛びたい

G

行番号を表示したい

:set number

【mac】NeoBundleの導入手順

$
0
0

環境

macOS Sieera 10.12.5

手順

 $ curl https://raw.githubusercontent.com/Shougo/neobundle.vim/master/bin/install.sh > install.sh

 $ sh ./install.sh

二つ目のコマンド打ち込むと、vimrcに記述する内容を教えてくれる。

ちなみに私のmacはこんな感じで教えてくれた。

"NeoBundle Scripts-----------------------------
if &compatible
  set nocompatible               " Be iMproved
endif

" Required:
set runtimepath+=/Users/NakaoRyo/.vim/bundle/neobundle.vim/

" Required:
call neobundle#begin(expand('/Users/NakaoRyo/.vim/bundle'))

" Let NeoBundle manage NeoBundle
" Required:
NeoBundleFetch 'Shougo/neobundle.vim'

" Add or remove your Bundles here:
NeoBundle 'Shougo/neosnippet.vim'
NeoBundle 'Shougo/neosnippet-snippets'
NeoBundle 'tpope/vim-fugitive'
NeoBundle 'ctrlpvim/ctrlp.vim'
NeoBundle 'flazz/vim-colorschemes'

" You can specify revision/branch/tag.
NeoBundle 'Shougo/vimshell', { 'rev' : '3787e5' }

" Required:
call neobundle#end()

" Required:
filetype plugin indent on

" If there are uninstalled bundles found on startup,
" this will conveniently prompt you to install them.
NeoBundleCheck
"End NeoBundle Scripts-------------------------

以下コマンドでvimrcを開き、一番上にコピペすれば設定完了。

$ vim ~/.vimrc

vimで各行末のスペースを消して改行をなくす

$
0
0

sublimeに踏査されているマルチカーソルで出来る技をvimでもできないかと探していたらアクシデントで見つけたコマンド笑

vimmer8.gif

例えばこんな感じのブロックがあったとします。

hoge.py
lst=[hogehogehogehogehogehogehogehogehoge,hogehogehogehogehogehogehogehogehoge,hogehogehogehogehogehogehogehogehoge,hogehogehogehogehogehogehogehogehoge,hogehogehogehogehogehogehogehogehoge,hogehogehogehogehogehogehogehogehoge,hogehogehogehogehogehogehogehogehoge,hogehogehogehogehogehogehogehogehoge,hogehogehogehogehogehogehogehogehoge,hogehogehogehogehogehogehogehogehoge,hogehogehogehogehogehogehogehogehoge,hogehogehogehogehogehogehogehogehoge,hogehogehogehogehogehogehogehogehoge,hogehogehogehogehogehogehogehogehoge,hogehogehogehogehogehogehogehogehoge,hogehogehogehogehogehogehogehogehoge,hogehogehogehogehogehogehogehogehoge,hogehogehogehogehogehogehogehogehoge,hogehogehogehogehogehogehogehogehoge,hogehogehogehogehogehogehogehogehoge,hogehogehogehogehogehogehogehogehoge,hogehogehogehogehogehogehogehogehoge]

これを以下のようにしたいとき、

hoge.py
lst=[hogehogehogehogehogehogehogehogehoge,hogehogehogehogehogehogehogehogehoge,hogehogehogehogehogehogehogehogehoge,hogehogehogehogehogehogehogehogehoge,hogehogehogehogehogehogehogehogehoge,hogehogehogehogehogehogehogehogehoge,hogehogehogehogehogehogehogehogehoge,hogehogehogehogehogehogehogehogehoge,hogehogehogehogehogehogehogehogehoge,hogehogehogehogehogehogehogehogehoge,hogehogehogehogehogehogehogehogehoge,hogehogehogehogehogehogehogehogehoge,hogehogehogehogehogehogehogehogehoge,hogehogehogehogehogehogehogehogehoge,hogehogehogehogehogehogehogehogehoge,hogehogehogehogehogehogehogehogehoge,hogehogehogehogehogehogehogehogehoge,hogehogehogehogehogehogehogehogehoge,hogehogehogehogehogehogehogehogehoge,hogehogehogehogehogehogehogehogehoge,hogehogehogehogehogehogehogehogehoge,hogehogehogehogehogehogehogehogehoge]

ctr+V + ctr+g + ctr+jJでなります。

実際にはvimで複数選択を可能にするプラグインでもできそうです。

[Vim] ホームポジションで頑張りたい人へ

$
0
0

同僚が知らなくてびっくりしたのでここに記す。

いつでも

キー効果
C-[Esc

インサートモード

キー効果
C-hカーソルの左にある一文字を削除
C-wカーソルの左にある単語を削除
C-m, C-j改行

だいたいこんな感じ。
ちょっと C-[ は変態的かもしれないが慣れたら慣れる。
C-i で Tab など他にもあると思うけど、私が活用してるのはこれくらい。
コマンドラインでも同じ挙動をするのでオススメ。

Vimプラグイン NERFTreeが便利だった

$
0
0

NERDTreeとは

vimのプラグインでvimを開きながらディレクトリをツリー表示することが出来るものです。

導入方法

vimのプラグインツール「NEOBUNDLEをインストールします。

curl https://raw.githubusercontent.com/Shougo/neobundle.vim/master/bin/install.sh | sh

vimrcを修正

~/.vimrcに以下のコードを記述する

~/.vimrc
ifhas('vim_starting')setnocompatible" Be iMproved  "Required:setruntimepath+=~/.vim/bundle/neobundle.vim/endif" Required:call neobundle#begin(expand('~/.vim/bundle/'))"LetNeoBundlemanageNeoBundle" Required:NeoBundleFetch 'Shougo/neobundle.vim'"MyBundleshere:NeoBundle'Shougo/neosnippet.vim'NeoBundle'Shougo/neosnippet-snippets'NeoBundle'tpope/vim-fugitive'NeoBundle'kien/ctrlp.vim'NeoBundle'flazz/vim-colorschemes'" You can specify revision/branch/tag.NeoBundle 'Shougo/vimshell', { 'rev' : '3787e5' }call neobundle#end()"Required:filetypepluginindenton" If there are uninstalled bundles found on startup,"thiswillconvenientlypromptyoutoinstallthem.NeoBundleCheck

NERDTreeのBundleを My Bundles here以下に追記します

NeoBundle 'scrooloose/nerdtree'

Bundleにインストール

~/.vimrcを保存してから再度vimを開きコマンドを実行

:NERDTreeToggle

これで素敵なvim生活が始まります!

PyCharmのIdeaVimで日本語検索

$
0
0

PyCharmにIdeaVimプラグインをインストールして使用して特に不満もなかったんですが、最近ソースコード中の日本語を検索することが多い仕事がありました。

「意外と普通にプログラム組んでるときって日本語検索しないもんなんだな」と気づかされました。

ショーカットキー「/」でVimと同様に検索できますが、日本語書くと文字化けします。

2017-07-09_18h53_06.png

もう諦めてCtrl+Shift+fでPyCharmの検索ウインドウ出してます。
F3で次を検索です。「n」とか打っても無駄です。

2017-07-09_18h53_44.png

PyCharmは「インストールしてそのまま使える」が一番良いところだと思うので、正直、調べる気にもなりません・・・
情報求む!


TerminalやMacVimでEsc (or ^[)キーで日本語IMEを英数に切り替える(Karabiner-Elementsによる設定)

$
0
0

Karabiner-ElementsがVersion 0.91.6となって、待望の「アプリケーション毎のキーバインディング」がサポートされました。

macOS SierraでKarabinerが使えなくなって以来、私のようなVimユーザにとって「ESCキーで日本語入力をOFFにする」設定が何かと不便で困っていましたが、今回のKarabiner-ElementsのアップデートでなんとかKarabiner時代と同様の設定が可能となりました。有り難し!

設定方法

$ vim ~/.config/karabiner/assets/complex_modifications/FromEscapeToJapanese_eisuu.json

このFromEscapeToJapanese_eisuu.jsonファイルに次の内容を記述して保存。1

FromEscapeToJapanese_eisuu.json
{"title":"Terminal等でESCあるいは^[で日本語入力を英数に","rules":[{"description":"TerminalまたはMacVimで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\\."]}]},{"type":"basic","from":{"key_code":"open_bracket","modifiers":{"mandatory":["left_control"]}},"to":[{"key_code":"japanese_eisuu"},{"key_code":"escape"}],"conditions":[{"type":"frontmost_application_if","bundle_identifiers":["^com\\.apple\\.Terminal$","^org\\.vim\\."]}]}]}]}
  • Karabiner-Elements PreferencesウィンドウでComplex Modificationsメニューを開く

Screenshot 2017-07-10 11.22.50.png

  • 左下の"Add rule"をクリックすると次のような設定可能なルールの一覧が表示される。

Screenshot 2017-07-10 11.26.22.png

  • "ESCを押したときに日本語入力を英数に切り替える。"の右にある"Enable"をクリックする。
    Screenshot 2017-07-10 11.27.48.png

  • "Complex Modifications"ウィンドウで当該ルールが追加されていることを確認。
    Screenshot 2017-07-10 11.28.17.png

以上で設定は終わりです。



  1. ここでは、TerminalアプリとVimアプリの起動時のみ有効になるように設定しています。他のアプリのbundle identifiersを調べたい場合は、Karabiner-ElementsのメインメニューからEventViewerを起動して"Frontmost Application"から調べることができます。 

GVimでNeobundleからpluginがインストールされなかったのでvim.exeからインストールした話

$
0
0

前提

Windows7 gvim(Kaori-Ya)

困ったこと

以下ページ見ながらNeobundleを導入した。
Windowsでgvimを使う(neobundleのインストール)

gvim.exeを立ち上げると、「インストールしますか」的なメッセージが出たので「はい」をクリックして、再起動した。
→ 再度gvim.exeを立ち上げると、またインストールしますか的メッセージがでてきた。どうにもpluginがインストールされていないっぽい。困った。

やったこと

bashでvim.exeを起動して、プラグインをインストールし、
再度gvimを起動。

結果

無事すべてのpluginがインストールできた。よかったよかった。

vimで空白文字を除いた行の先頭に移動する

$
0
0

ミスタイプで発見しました。
コマンドモードで_をタイプすると、空白文字以外の行の先頭にカーソルが移動します。
Iでインサートモードにならないイメージ。

YMC (YouCompleteMe)のポップアップメニューの色を変える方法🏁

$
0
0

 結果

Screen Shot 2017-07-11 at 9.00.04 PM.png

この用にvimで大人気のプラグインYouCompleteme(以下YCM)ポップアップ部分の色を変えるやり方。

YCMはIDEのように入力に合わせて自動で補完候補を出してくれるvim用プラグインです。知らなかった方は今すぐ使ってみましょう。

https://github.com/Valloric/YouCompleteMe

動機

vim-quantumというMaterial Designなスキーマを入れているのですが、初期状態だとYCMのポップアップが読みずらい😥
Screen Shot 2017-07-11 at 9.55.39 PM.png
なので変える方法はないかなーって思ったところあったので投稿することにしました。

やり方

  1. vimでは使える色が限られているようなのでどの色が使えるのか把握する必要があります。
    :runtime syntax/colortest.vimをvimのコマンドにコピペして実行してください。こんな結果が出るはずです。 Screen Shot 2017-07-11 at 8.56.52 PM.pngここに表示されているのがvimで使える色のリストです。gvim(macvim)などではヘックスも使えるようです。

参考: vimdoc

2. ~/.vimrcでPmenuの設定をします。

.vimrcに次のようにコピペしてください。以下のコードでは選択されていない候補の文字を白、背景を黒。そして、選択されている候補の文字を白、背景をグレーに変えています。

.vimrc
highlight Pmenu ctermfg=white ctermbg=black
highlight PmenuSel ctermfg=white ctermbg=gray

Pmenu: 選択されていない候補の設定
PmenuSel: 選択されている候補の設定
ctermfg: 文字の色の設定
ctermbg: 背景色の設定

ちなみの自分の.vimrcのスニペットです。

.vimrc
" Change popup menu color for non selected itemshighlight Pmenu ctermfg=lightgrey ctermbg=black 
" Change popup menu color for selected itemhighlight PmenuSel ctermfg=white ctermbg=gray

highlight PmenuSel ctermfg=white ctermbg=gray guifg=#000000 guibg=#ffffff
こんな風にしてgvimの設定もできるらしいのですが自分はいじってません。。。

詳細は:h Pmenuコマンドをvimで実行してください。
またはStackOverFlowをどうぞ。
https://stackoverflow.com/questions/29628586/change-color-settings-in-you-complete-me

  1. あとはちゃんと:wでセーブ、:source %で.vimrcのリロードを行ってください。 成功していたらこんな風に素晴らしいYouCompleteMeとvimによる素晴らしい開発環境が待ってますよ!vim楽しい!😆

Screen Shot 2017-07-11 at 9.24.23 PM.png

私の育成中のドットファイルたちをみたいっていう物好きな方はこちらにどうぞ

https://github.com/YukiKuroshima/dotfiles

🎉🎉🎉 Happy Coding with vim! 🎉🎉🎉

参考にしたサイト

Vimでスラッシュを含む文字列を検索する方法

$
0
0

通常、文字列の検索はスラッシュの後に文字列を指定する。

/検索する文字列

スラッシュ入りの文字列を手っ取り早く検索するためには、スラッシュを?(クエスチョン)にする。

例)/var/www/htmlを検索する

?/var/www/html

スラッシュをバックスラッシュでエスケープできるか試してみたが、これは出来なかった。

/\/var\/www\/html

ALEでgometalinterを使う

$
0
0

tl;dr

https://gyazo.com/81a3557563de001f9cc1a23d9ee4a1b5

  • Vim8 or NeoVimからgometalinterを使う
  • linterプラギンとしてALEを使う
  • 画像のような表示にするためにNerd Fontsを使う

gometalinter

Go用のlinterはいくつかあるがこれらを統合的に扱えるようにしたものである。
サポートしているlinterはgithub上に記載されている。
https://github.com/alecthomas/gometalinter#supported-linters

Install

go get -u gopkg.in/alecthomas/gometalinter.v1gometalinter --install --update

それぞれのlinterについては以下のような記事を参考にされたし。
- Go の CI で Lint と カバレッジ回して非人間的なレビューは自動化しよう in 2016年
- Go Meta Linter がサポートするツールまとめ

ALE

ALEは、Vim8もしくはNeoVimで非同期にlinterを実行してくれるプラギンである。
Go以外にも様々な言語1に対応している。
似たようなプラギンは多数存在するわけだが、設定なしでもすぐ使えるという点がよい。
なにも考えなければインストールするだけで使える、便利。
Goでもいくつかのlinterを使えるようになっているが、デフォルトはgofmtになっているのでgometalinterにする必要がある。

plugin managerにはdein.vimを使っているのでその場合だと以下ような感じになる。

init.vim
if&compatiblesetnocompatibleendiflet s:dein_dir='~/.cache/dein/repos/github.com/Shougo/dein.vim'setruntimepath+=s:dein_dir

if dein#load_state('~/.cache/dein')call dein#begin({)call dein#add(s:dein_dir)call dein#add('w0rp/ale')call dein#end()call dein#save_state()endiffiletype plugin indent onsyntax enable

" for ALEletg:ale_lint_on_text_changed ='never'letg:ale_set_loclist =0letg:ale_set_quickfix =1letg:ale_sign_column_always =1letg:ale_lint_on_enter =0letg:ale_open_list =1letg:ale_keep_list_window_open =0" for goletg:ale_linters.go='gometalinter'letg:ale_go_gometalinter_options ='--fast --enable=staticcheck --enable=gosimple --enable=unused'

g:ale_go_gometalinter_optionsでgometalinter実行時のoptionを渡せる。
--fastは実行に時間のかかるlinterを除いて実行してくれる。
上記の設定だとファイル保存時にlintしてくれる。非同期に実行するとはいえ、--fastなしだともっさりしてしまうのでつけている。
それ以外の--enableはお好みで追加。

これだけでALEがgometalinterを実行してくれるようになる。

Powerline

linter結果にPowerlineフォントを使う。
みんな大好きRictyのpowerlineパッチのインストールは以下。

brew tap sanemat/fontbrew install ricty --powerline --vim-powerline

terminalのfontをRictyPowelineにしつつ、ALEの設定に以下を追加する。

init.vim
letg:ale_statusline_format = ['⨉ %d','⚠ %d','⬥ ok']
letg:ale_sign_error ='⤫'letg:ale_sign_warning ='⚠'

Nerd Fonts

icon fontをstatuslineに表示するためにNerd Fontsのパッチを以下の手順でRictyにあてあげる必要がある。

brew install fontforgegit clone https://github.com/ryanoasis/nerd-fontscd nerd-fontschmod +x font-patcherfontforge -script ./font-patcher ~/Library/Fonts/Ricty\ Regular\ for\ Powerline.ttf --fontawesome --fontlinux --octicons --pomicons --powerline --powerlineextracp -f ./Ricty\ Regular\ for\ Powerline\ Nerd\ Font\ Plus\ Font\ Awesome\ Plus\ Octicons\ Plus\ Pomicons\ Plus\ Font\ Linux.ttf ~/Library/Fonts/fc-cache -vf

nerd-fontsのcloneにはそれなりに時間がかかるのでcoffeeでも飲むとよい :coffee:

ここで作ったフォントをiTerm2とかの設定で使うようにする。
ALEの設定に以下を追加。

lightline

statuslineにはlightline.vimを使う。
またlightlineのcolorthemeにtender.vimを使い、NerdFontを表示するためにvim-deviconsをいれる。

プラギンの追加のところに以下を追記。
ちなみにvim-deviconsを先に読み込む必要がある。

init.vim
call dein#add('ryanoasis/vim-devicons')call dein#add('itchyny/lightline.vim')call dein#add('jacoborus/tender.vim')

lightline用の設定として以下を追加します。(長文)

init.vim
letg:lightline = {
      \ 'colorscheme': 'tender',
      \ 'active': {
      \   'left': [ [ 'mode','paste' ], [ 'fugitive','filename' ] ],
      \   'right': [ [ 'lineinfo' ], ['percent'], [ 'ale_error','ale_warning','ale_ok','char_code','fileformat','fileencoding','filetype' ] ]
      \ },
      \ 'component_function': {
      \   'fugitive': 'LightLineFugitive',
      \   'filename': 'LightLineFilename',
      \   'fileformat': 'LightLineFileformat',
      \   'filetype': 'LightLineFiletype',
      \   'fileencoding': 'LightLineFileencoding',
      \   'mode': 'LightLineMode',
      \   'char_code': 'LightLineCharCode',
      \ },
      \ 'component_function_visible_condition': {
      \   'mode': 1,
      \ },
      \ 'component_expand': {
      \   'ale_error': 'LightLineAleError',
      \   'ale_warning': 'LightLineAleWarning',
      \   'ale_ok': 'LightLineAleOk',
      \ },
      \ 'component_type': {
      \   'ale_error': 'error',
      \   'ale_waring': 'waring',
      \   'ale_ok': 'ok',
      \ },
      \ 'separator': {'left': '⮀','right': '⮂'},
      \ 'subseparator': {'left': '⮁','right': '⮃'}
      \ }

augroup LightLineOnALE
  autocmd!
  autocmd User ALELint call lightline#update()
augroup END

function! LightLineModified()return&ft=~'help' ? '' : &modified ? '' : &modifiable ? '' : '-'endfunctionfunction! LightLineReadonly()return&ft!~? 'help'&& &readonly ? '' : ''endfunctionfunction! LightLineFilepath() abort
  letl:path_string = substitute(expand('%:h'), $HOME,'~','')ifwinwidth(0)<120&& len(l:path_string)>30letl:path_string = substitute(l:path_string,'\v([^/])[^/]*%(/)@=','\1','g')endifreturnl:path_string
endfunctionfunction! LightLineFilename()let fname = expand('%:t')return fname =='ControlP' ? g:lightline.ctrlp_item :
        \ fname =='__Tagbar__' ? g:lightline.fname :
        \ fname =~'__Gundo\|NERD_tree' ? '' :
        \ &ft=='vimfiler' ? vimfiler#get_status_string() :
        \ &ft=='denite' ? LightLineDenite() :
        \ &ft=='vimshell' ? vimshell#get_status_string() :
        \ (''!= LightLineReadonly() ? LightLineReadonly() . ' ' : '') .
        \ (''!= fname ? LightLineFilepath().' '.fname : '[No Name]') .
        \ (''!= LightLineModified() ? ' ' . LightLineModified() : '')endfunction" ref. https://gist.github.com/pocari/84c78efa38b5c2fc1f659d1aac3face8function! LightLineDenite()let mode_str = substitute(denite#get_status_mode(),"-\\| ","","g")call lightline#link(tolower(mode_str[0]))return mode_str
endfunctionfunction! LightLineFugitive()tryif expand('%:t')!~? 'Tagbar\|Gundo\|NERD'&& &ft!~? 'vimfiler'&& exists('*fugitive#head')let mark =' '" edit here for cool marklet _ = fugitive#head()return strlen(_) ? mark._ : ''endifcatchendtryreturn''endfunctionfunction! LightLineFileformat()returnwinwidth(0)>120 ? &fileformat . (exists('*WebDevIconsGetFileFormatSymbol') ? ' ' . WebDevIconsGetFileFormatSymbol() : '') : ''endfunctionfunction! LightLineFiletype()returnwinwidth(0)>70 ? (strlen(&filetype) ? &filetype . (exists('*WebDevIconsGetFileTypeSymbol') ? ' ' . WebDevIconsGetFileTypeSymbol() : ''): 'no ft') : ''endfunctionfunction! LightLineFileencoding()returnwinwidth(0)>120 ? (strlen(&fenc) ? &fenc : &enc) : ''endfunctionfunction! LightLineMode()let fname = expand('%:t')return fname =='__Tagbar__' ? 'Tagbar' :
        \ fname =='ControlP' ? 'CtrlP' :
        \ fname =='__Gundo__' ? 'Gundo' :
        \ fname =='__Gundo_Preview__' ? 'Gundo Preview' :
        \ fname =~'NERD_tree' ? 'NERDTree' :
        \ &ft=='unite' ? 'Unite' :
        \ &ft=='denite' ? 'Denite' :
        \ &ft=='vimfiler' ? 'VimFiler' :
        \ &ft=='vimshell' ? 'VimShell' :
        \ winwidth(0)>60 ? lightline#mode() : ''endfunctionfunction! LightLineCharCode() abort
  ifwinwidth(0)<=120return''endif  " if char on cursor is `Λ̊`, :ascii returns below.  " <Λ> 923, 16進数 039b, 8進数 1633 < ̊> 778, 16進数 030a, 8進数 1412redir=>l:tmp |silent!ascii|redir END
  letl:chars = []
  call substitute(l:tmp,'<.>\s\+\d\+,\s\+\S\+ \x\+,\s\+\S\+ \d\+','\=add(l:chars, submatch(0))','g')if len(l:chars)==0return''endifletl:ascii= []
  forl:cinl:chars
    letl:m= matchlist(l:c,'<\(.\)>\s\+\d\+,\s\+\S\+ \(\x\+\)')if len(l:m)>0call add(l:ascii, printf('%s %s',l:m[1],l:m[2]))endifendforreturnjoin(l:ascii,', ')endfunctionfunction! LightLineAleError() abort
  return s:ale_string(0)endfunctionfunction! LightLineAleWarning() abort
  return s:ale_string(1)endfunctionfunction! LightLineAleOk() abort
  return s:ale_string(2)endfunctionfunction! s:ale_string(mode)if!exists('g:ale_buffer_info')return''endifletl:buffer = bufnr('%')letl:counts = ale#statusline#Count(l:buffer)let [l:error_format,l:warning_format,l:no_errors] =g:ale_statusline_format

  ifa:mode==0" Errorletl:errors =l:counts.error +l:counts.style_error
    returnl:errors ? printf(l:error_format,l:errors) : ''elseifa:mode==1" Warningletl:warnings =l:counts.warning +l:counts.style_warning
    returnl:warnings ? printf(l:warning_format,l:warnings) : ''endifreturnl:counts.total ==0? l:no_errors: ''endfunction

以上で完了。

remapだらけのClang初心者.vimrc保存版

$
0
0

久しぶりにPC触ると.vimrcの位置すら記憶から飛んでるvim初心&C初心の人(自分)向けのバックアップ的な何か(Github?知らない子でs(ry))

  1 ".vimrc ============================================================
  2
  3
  4
  5 "visual ============================================
  6 syntax on
  7 set number
  8 set title
  9 set ruler
 10 set cursorline
 11
 12 set tabstop=4
 13 set autoindent
 14 set shiftwidth=4
 15 "set expandtab
 16 filetype plugin indent on
 17
 18
 19
 20 "Keymap ============================================
 21 nnoremap ; :  " :を;で代用
 22 nnoremap s <Nop> " sの初期化
 23 nnoremap sj <C-w>j " 分割画面移動
 24 nnoremap sk <C-w>k
 25 nnoremap sl <C-w>l
 26 nnoremap sh <C-w>h
 27 nnoremap sv :vsplit " 画面左右分割
 28 nnoremap ss :split " 画面上下分割
 29
 30 inoremap { {}<Left> " 括弧補完(C用)
 31 inoremap {<Enter> {}<Left><Enter><Enter><up><TAB>
 32 inoremap ( ()<Left>
 33 inoremap (<Enter> ()<Left><Enter><Enter><up><TAB>
 34 inoremap [ []<Left>
 35 inoremap [<Enter> []<Left><Enter><Enter><up><TAB>
 36 inoremap " ""<Left>
 37 inoremap <silent>jj <ESC> " jjでノーマルモードに
 38 inoremap <space><space> <ESC>o
 39
 40
 41
 42 "setting color =====================================
 43 colorscheme molokai
 44 autocmd ColorScheme * highlight LineNr ctermfg=22 guifg=#757575
 45 autocmd ColorScheme * highlight CursorLineNr ctermfg=22 guifg=#858585
 46 autocmd Colorscheme * highlight Cursor ctermfg=22 guifg=#707070
 47 autocmd ColorScheme * highlight Comment ctermfg=22 guifg=#808080
 48

Vim patchダイジェスト [2017/07] (仮)

$
0
0

Vim patchダイジェスト [2017/07] (仮)
(8.0.06928.0.0699)

  • 8.0.0698: timerのコールバック関数内で:pyevalかその他のPythonコマンドを使用すると、Vimが終了時にクラッシュする時がある件を修正しました。
  • 8.0.0693: :four_leaf_clover::terminalを初期実装しました。libvtermをANSI Cに変換したコードも含みます。※まだちゃんと動きません。 (関連patch: 8.0.0694, 8.0.0695)
  • 8.0.0692: 'incsearch'を設定し、?(後方検索)中にCTRL-Gを使用すると、その後の<CR>でカーソルが間違った方向に移動してしまう件を修正しました。

凡例

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

方針

こちらを参照。


ひとこと

ちょっと忙しくなってきました。

Macのターミナル上(とVim上)で全角記号の幅がおかしい問題を解決する

$
0
0

背景

Macのターミナルを本格的に使用しはじめて、「ターミナル上で表示される全角記号の幅がおかしい」と気付きましたが、最近まで特に対応していませんでした。
しかし、Vimでファイルを編集している際に全角記号があると編集箇所がわかりにくい!とストレスが溜まるので解決策を調べて解決したお話です。

現象

Macのターミナル上やVim上では、全角記号の幅がおかしくなります。
before.png

問題を解決するための設定

1. ターミナルの環境設定

ターミナル > 環境設定 > (デフォルトに指定しているプロファイルを選択して)し右ペインの詳細タブ >最下部のUnicode 東アジアA(曖昧)の文字幅をW(広)にするにチェック
(Vimを使用しない場合であれば、この設定だけで完了です)

スクリーンショット 2017-07-18 11.08.40.png

2. .vimrcの編集

.vimrcへ以下を追記する

.vimrc
"" Macのターミナルで全角記号の表示がずれる問題への対応                                       setambiwidth=double

VimプラグインYggdroot/indentLineを使用している場合

私の.vimrcの場合、上記の設定をしてもカーソル行だけインデント表記がずれる、という問題が発生したのでその対応。
インデント視覚化の文字に全角記号を使用していると発生しました。

.vimrc
"" インデント視覚化に半角|を使用letg:indentLine_char ='|'

結果

全角記号も正しく表示されるようになりました。
after.png

おまけ

今回始めて知ったんですが、Qiitaのコードハイライトって.vimrcにも対応しているんですね。
マークダウンで ```vim:.vimrcで記載するとコードハイライトされました。素敵!

git commit の時に差分を表示しつつ上下分割して調整する

$
0
0

git commit の時のエディタをvimにしているとデフォルトだとコミットメッセージの記述スペースのみが表示されると思う。
以下のように

def.png

このままだと変更ファイルの一覧が出るだけで差分がわからない。
そんな時にはvimrcに以下の設定を追加してやると差分が出る。

autocmd FileType gitcommit DiffGitCached

DiffGitCached.png

このままでもいいんだが差分が上に出ると差分の確認がしづらく、表示行数が少なく感じる。差分の表示が下でコミットメッセージの記述スペースを上にして省スペースにしておきたい。

autocmd FileType gitcommit DiffGitCached | wincmd x | resize 10

この記述だとこうなる

wincmd x.png

vimのhelpを引きながら確認してて、以下の機能を使用した。:help wincmdをして使えそうな機能をかいつまんでカスタマイズする事ができる。

                        *:winc* *:wincmd*
以上のコマンドは ":wincmd" によっても実行することができる:

:[count]winc[md] {arg}
        CTRL-W [count] {arg} を実行するのと同じ。例: >
CTRL-W x                    *CTRL-W_x* *CTRL-W_CTRL-X*
CTRL-W CTRL-X   カウント指定なし: カレントウィンドウと次(1つ下)のウィンドウを
        入れ替える。次のウィンドウがない(カレントウィンドウが一番下の)
        場合は、前(1つ上)のウィンドウと入れ替える。
        カウント指定有り: カレントウィンドウと上からN番目のウィンドウ
        (一番上は1番目)を入れ替える。カーソルは入れ替えた相手のウィン
        ドウに移動する。
        水平分割と垂直分割が混ざっている場合には、カレントウィンドウと
        同じ段/列の中だけで入れ替えが行われる。
:res[ize] [N]
CTRL-W CTRL-_                   *CTRL-W_CTRL-_* *CTRL-W__*
CTRL-W _    カレントウィンドウの高さをN行にする(デフォルト: 可能な限り高く
        する)

満足🌸

参考: http://d.hatena.ne.jp/metalglue/20091124/1259051881

FlyGrep.vimで、Helmライクな高速コード検索を実現

$
0
0

概要

Vimでは ack.vimag.vimripgrepを合わせてコード検索をしていたが、もっとシームレスにできないかと思っていた。

というのも、以前Emacsを使っていた時に Helm-agによる高速な検索が実現できていたからだ。

FlyGrep.vim

https://github.com/wsdjeg/FlyGrep.vim

そう思っていたら、 wsdjeg 氏が作っていた。SpaceVim から切り取ったものらしい。

out.gif

Helm-ag のような使い心地だ。もちろん Helm-ag の方が高機能であるが。

備考

vim-swoopもある。
以前試してあまり使い勝手が良くなかった覚えがあるが、今見たらかなり使いやすくなっていそうだった。後で試す。

透明感のあるVim環境をめざして

$
0
0

はじめに

僕は透明感のある作業環境が好きです。
GVimでもiTermでもCygwinでも、なんでもすぐ背景を半透明化したがります。
なんとなく格好いいし、後ろにブラウザや資料を展開していると、いちいちウィンドウを切り替えることなく透かして見ることができて便利です。
しかしVimのカラースキームに背景色が設定されていると、ウィンドウの透過設定が無視され、せっかくの透明感が台無しになってしまいます。
そこで、.vimrcに設定を書き加え、カラースキームの良さはそのままに、背景だけを透明化します。

.vimrc

.vimrcでカラースキームを設定している箇所

.vimrc
colorscheme XXXXX

よりも後の行に、以下を追記します。

.vimrc
highlight Normal ctermbg=NONE guibg=NONEhighlight NonText ctermbg=NONE guibg=NONEhighlight SpecialKey ctermbg=NONE guibg=NONEhighlight EndOfBuffer ctermbg=NONE guibg=NONE

非テキストのctermbgguibgNONEを設定しています。

以下、それぞれのハイライトグループの意味です。

グループ意味
Normal通常のテキスト部分
NonTexteol, extends, precedes
SpecialKeynbsp, tab, trail
EndOfBufferバッファ外の行(行頭に~が表示されている行)

EndOfBufferのみ、Vim 7.4.2213 以降のバージョンで使用可能

これで、Vimに透明感を与えることができました。

GUIパーツの非表示化

GVimやMacVimでは、ウィンドウ内にツールバーやスクロールバー等が表示されます。
これらのパーツはどうやっても半透明化できないので、非表示化してしまいましょう。
そもそもよく訓練されたVimmerであれば、マウスを使って操作するインターフェースなど必要ありません。

.vimrc
if has('gui')setguioptions-=T
  setguioptions-=msetguioptions-=rsetguioptions-=R
  setguioptions-=lsetguioptions-=L
  setguioptions-=bendif

has('gui')で、GUIモードで動作しているかどうかを判別できます。
guioptions-=Xでは、GUI用のどのパーツを非表示化するかを指定しています。
オプションの意味については、このあたりを参照ください。

GUI固有の設定なので、.gvimrcに書いても良いです。
その場合はhas('gui')は不要です。

.gvimrc
setguioptions-=T
setguioptions-=msetguioptions-=rsetguioptions-=R
setguioptions-=lsetguioptions-=L
setguioptions-=b

以上の設定で、テキストとタイトルバー以外の全てが透過された、とても美しい環境ができあがります。

Viewing all 5738 articles
Browse latest View live


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