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

vimmerに殺されるその前に

$
0
0

https://qiita.com/fasahina/items/2767891134028648f288

viは、モードのあるエディターです。一般人のみなさんがお使いになっている、WindowsやMacのデスクトップアプリケーションのエディターは、モードレス(モードのない)エディターです。

注:Twitterなどのクソレスホイホイを使っていると、viやemacsを愛用するご老人からクソレスがたくさん張り付くのですが、事前にお伝えしておくと、私は毎日viを利用しています。gitなどで。

viがなぜモード(標準モード・挿入モード)を持つかというと、アローキー(矢印キー)を使わずにカーソル移動・ページ移動をできるようにするためです。これの何が便利かというと、指をキーボードのホームポジションから離さずに、カーソル移動ができるのです。逆にいうと、ここにメリットを感じないなら、モードのあるエディターはうざいだけです。

エンジニアの多くは、短気で癇癪持ちで高効率にこだわります。キー入力の0.1秒にこだわるのです。

以前、私はtwitterでviをdisったら、viを愛する方からウンコ💩を投げられました。だから容赦なく💩を投げ返しました。

ブラウザのURLの入力欄でviのキーバインドが使えますか?

レスは返ってきませんでした。

ちなみに、MacならデフォルトでEmacsのキーバインドが利用できます。Controlキーを押しながらbfを押してみて下さい。カーソルが移動します。Controlキーとhで削除です。他にもたくさんありますが、覚えにくいのが難点です。操作性も良いとは言い難いでしょう。

そこで登場したのが、私が考案したダイヤモンドカーソルです。

Controlキーとikjlを利用します。
i→ 上
k→ 下
j→ 左
l→ 右
です。

これをtwitterで投稿したら、

ダイヤモンドの意味を知らねーんじゃねーの?w

っていう💩を投げられました。

Krabiner-Element

macOS標準では、私の考案したダイヤモンドカーソルは実現できません。私の考案したダイヤモンドカーソルを使いたい方は、Krabiner-Elementをインストールして下さい。

~/.config/karabiner/assets/complex_modificationsディレクトリに以下のjsonファイルを保存して、環境設定から有効にして下さい。

diamond_cursor.json
{"title":"Diamond Cursor","rules":[{"description":"LControl + i, k, j, l is change to arrow cursor","manipulators":[{"type":"basic","from":{"key_code":"i","modifiers":{"mandatory":["left_control"],"optional":["any"]}},"to":[{"key_code":"up_arrow"}]},{"type":"basic","from":{"key_code":"k","modifiers":{"mandatory":["left_control"],"optional":["any"]}},"to":[{"key_code":"down_arrow"}]},{"type":"basic","from":{"key_code":"j","modifiers":{"mandatory":["left_control"],"optional":["any"]}},"to":[{"key_code":"left_arrow"}]},{"type":"basic","from":{"key_code":"l","modifiers":{"mandatory":["left_control"],"optional":["any"]}},"to":[{"key_code":"right_arrow"}]}]},{"description":"LControl + < or > is word jump!","manipulators":[{"type":"basic","from":{"key_code":"comma","modifiers":{"mandatory":["left_control"],"optional":["any"]}},"to":[{"key_code":"left_arrow","modifiers":["left_option"]}]},{"type":"basic","from":{"key_code":"period","modifiers":{"mandatory":["left_control"],"optional":["any"]}},"to":[{"key_code":"right_arrow","modifiers":["left_option"]}]}]},{"description":"LControl + : or ; is line jump!","manipulators":[{"type":"basic","from":{"key_code":"semicolon","modifiers":{"mandatory":["left_control"],"optional":["any"]}},"to":[{"key_code":"left_arrow","modifiers":["left_command"]}]},{"type":"basic","from":{"key_code":"quote","modifiers":{"mandatory":["left_control"],"optional":["any"]}},"to":[{"key_code":"right_arrow","modifiers":["left_command"]}]}]},{"description":"LControl + [ or ] is page up/down!","manipulators":[{"type":"basic","from":{"key_code":"close_bracket","modifiers":{"mandatory":["left_control"],"optional":["any"]}},"to":[{"key_code":"page_up"}]},{"type":"basic","from":{"key_code":"backslash","modifiers":{"mandatory":["left_control"],"optional":["any"]}},"to":[{"key_code":"page_down"}]}]}]}

え?Windows???

XPの時は、猫まねきとか 窓使いの憂鬱を使っていましたが、Windows10では動かないんじゃないかなぁ?


Vimプラグイン導入(Vendle)

$
0
0

はじめに

vimとはLinux/Unixにはじめから入っているデフォルトのテキストエディタ。詳しいことは以下を参照。
https://qiita.com/JpnLavender/items/fabcc79b4ab0d52e1f6d

Vendleでvimプラグインを管理するようにしたのでその忘備録です。
Vendleのリポジトリはこちら。
https://github.com/VundleVim/Vundle.vim

環境

MacOS Mojave
Vim version 8.0.1283
ターミナル iTerm2

準備

ディレクトリを作成

mkdir -p ~/.vim/bundle

githubからvendleのリポジトリをクローン

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

クローン実行画面
スクリーンショット 2019-07-10 21.59.11.png

.vimrcを編集する

vi ~/.vimrc

vimからgitの操作が可能になるプラグインを入れてみる。
17~26行目がvendleの設定。
23行目が今回導入するgit操作が可能になるプラグイン。

set encoding=utf-8
  2 scriptencoding utf-8
  3 set expandtab " タブ入力を複数の空白入力に置き換える
  4 set number " 行数表示
  5 set softtabstop=4 "連続した空白に対してタブキーやバックスペースキーでカーソルが動く幅
  6 set tabstop=4 " 画面上でタブ文字が占める幅
  7 set smartindent " 改行時に前の行の構文をチェックし次の行のインデントを増減する
  8 set shiftwidth=4 " smartindentで増減する幅
  9 set showmatch " 括弧の対応関係を一瞬表示する
 10 set wildmenu " コマンドモードの補完
 11 hi LineNr ctermbg=0 ctermfg=7
 12 syntax on
 13
 14 "
 15 " 以下はvendleによるプラグイン設定
 16 "
 17 set nocompatible
 18 filetype off
 19 set rtp+=~/.vim/bundle/Vundle.vim
 20 call vundle#begin()
 21
 22 Plugin 'VundleVim/Vundle.vim'
 23 Plugin 'tpope/vim-fugitive'
 24 
 25 call vundle#end()
 26 filetype plugin indent on

インストール

vimを起動してプラグインのインストールを行う。以下のコマンドを実行する。

:PluginInstall

スクリーンショット 2019-07-10 22.12.16.png

実行

適当なgitリポジトリ直下でvimを起動してみる。
右画面にてコマンドモードで「:Glog」(git log)をうつ。
gitのログや差分まで確認することができる。すごくいい。

スクリーンショット 2019-07-10 22.28.02.png

Macbookでアンダースキャンが治らないときの対処法

$
0
0

先日MacBookをふとデュアルスクリーンにしたいと思いディスプレイに繋いだのですがなんか黒い枠がずっと出てる...
なんだこれ。という訳で色々調べて解決方法が見つかったのでメモ。

結論

Terminalで

sudo vi /private/var/db/.com.apple.iokit.graphics

と入力するとおそらく以下の様な項目が出るはずなので

<key> pscn </key> 
<integer> XXXX(10000以下の数字) </integer> 

タグの中の値を10000に変える。

あとがき

いやーこんなんわからないですね。
地味に小一時間ハマりました。
あとvimはやっぱり慣れません。

参考URLは下記
https://discussions.apple.com/thread/7966665?page=2

base16-vimとNeoSolarizedの間の子を作った

$
0
0

はじめに(経緯)

かねてよりSolarizedカラースキームを愛用していましたが、設定が面倒でつらくなった(特にターミナルのVim)ので、ターミナルとVimのカラースキームを1コマンドで設定・連動してくれる超便利ツールbase16-shellbase16-vimを導入しました。これが本当に便利で、これから愛用していこうと思っていたのですが、同梱されているSolarizedは配色が少し変でした。

自力で直すのは大変そうだったので、base16-vimをフォークし、正しい配色を提供してくれているNeoSolarizedからカラースキームのファイルを抜き出し、配色のおかしいファイルを置き換えました。

動作例

カラースキームを1コマンドでサクサクと切り替えられています(本家の機能そのまま)。そして、本フォークの目的であるSolarizedの美しいカラースキームが正しく得られています。

example-base16vim

本フォークの導入方法

base16-shellのインストール・設定を行う

  1. 以下のコマンドを実行

    インストール用コマンド
    git clone https://github.com/chriskempson/base16-shell.git ~/.config/base16-shell
    
  2. BashまたはZshをご利用の方は以下のスクリプトを~/.bashrcまたは~/.zshrcに貼り付ける

    ~/.bashrc(~/.zshrc)
    # Base16 ShellBASE16_SHELL="$HOME/.config/base16-shell/"[-n"$PS1"]&&\[-s"$BASE16_SHELL/profile_helper.sh"]&&\eval"$("$BASE16_SHELL/profile_helper.sh")"
  3. Fishをご利用の方は以下のスクリプトを~/.config/fish/config.fishに貼り付ける

    ~/.config/fish/config.fish
    # Base16 Shellif status --is-interactiveset BASE16_SHELL "$HOME/.config/base16-shell/"source"$BASE16_SHELL/profile_helper.fish"
    end
    

Vim(NeoVim)の設定

  1. .vimrcまたは.config/nvim/init.vimに以下のスクリプトを貼り付ける

    ~/.vimrc(~/.config/nvim/init.vim)
    "           〜省略〜call dein#add('matoruru/base16-vim')"           〜省略〜if filereadable(expand("~/.vimrc_background"))let base16colorspace=256
      source ~/.vimrc_background
    endif"           〜省略〜

参考

本家様
- chriskempson/base16-vim
- icymind/NeoSolarized

今回のフォークリポジトリ
- matoruru/base16-vim

pyvimが見つからないエラー

$
0
0

現象

ちょっと前からdeniteを開こうとすると下記エラーが発生するようになってしまいました。

[vim-hug-neovim-rpc] failed executing: pythonx import pynvim
[vim-hug-neovim-rpc] Vim(pythonx):Traceback (most recent call last):  

原因

調べた結果、vim-hug-neovim-rpcが更新され、読み込むモジュールがneovim -> pynvimとなっていました。
さらに、vimコンパイル時のpythonとPCのpythonのバージョンが異なっていた模様。

vim : python 3.6.4
PC  : python 3.7.4

だから、なんどpip3 install pynvimしても認識されなかったようです。

対応

macvim-kaoriyaをやめ、macvimをインストールし直しました。

brew uninstall macvim-kaoriya
brew install macvim

vimコマンドラインで確認

pyx print(sys.version)
=> 3.7.4 (default, Jul  9 2019, 18:13:23) 

無事deniteも動くようになりました。

[Vim] カーソル上の単語でvimgrep

$
0
0

皆さんvimgrep使ってますか?便利ですよねvimgrep。ただ、「*」みたいな単語検索が無くて不便だったので作りました。

概要

~/.vimrc
nnoremap " *:vimgrep/<C-r>// **/*.{cpp,cu,h,hpp}

これで「"」を押せば一発でvimgrepが走ります。以下詳細。

やりたいこと

たとえば、関数の引数を変えたので関数を呼んでいるところをすべて修正したいという状況が考えられます(void foo(int a)をvoid foo(int a, float b)に書き直したなど)。
同一ファイルであれば単語検索(*ないし#)を使えばいいんですが、大抵の場合コードが複数ファイルに跨っているので、vimgrepなりtabnewなりで虱潰しに直していく必要があります。とはいえいずれも手数が掛かってめんどくさいので、mapに登録して楽をしましょうというやつです。
というわけで、冒頭に書いた一行の各要素を解説していきます。

vimgrep

:vimgrep[word]{src1 src2 ...]

検索文字列(word)を列挙したファイル(sec1 src2 ...)から探して一覧を出力してくれます。便利。
vimgrepでググるといろいろ出てくるけど、下記がわりと簡潔でわかりやすい(個人の感想です)
https://qiita.com/tsumac/items/3972d5347a5f6e37ca09

ただデフォルトだと検索文字列もファイル名も全部手打ちで書かないといけなくてめんどくさいので、そこも自動化していきます。

*

カーソル上の単語を検索するVim標準コマンドです。すごく便利。hjklの次に重要といっても過言ではない(言い過ぎ)

/<C-r>//

「*」はファイル内検索でしか無いので、vimgrepに持っていくには一工夫が必要です。
そこでレジスタというやつを使ってやります(CPUの話ではないです)

https://qiita.com/0829/items/0b3f63798b6910623efc
↑の9. にある通り、vimでの検索文字列は「"/」なる名前のレジスタに登録されています。
このレジスタを貼り付けるにはCtrl+rのあとに/(スラッシュ)を打てばよいです。

また、左右をスラッシュで括っているのは正規表現に対応するためです。
(*での検索は単語の開始と終了を表す正規表現(<と>)がついているので)

**/*.{cpp,cu,h,hpp}

「**/」はカレントディレクトリから階層的にファイル探索する、という意味らしいです。たとえば、

src/hoge/*
src/hoge/fuga/*
src/include/foobar/*

この辺りがすべてヒットするということですね。これも便利。

また、「*.{cpp,cu,h,hpp}」は拡張子が.cpp, .cu, .hまたは.hppのファイルを指します。bashと同じです。
Pythonの人なら*.py、FORTRANの人なら*.{f,f90}などど変えればよいですね。

おまけ

併せて使うと便利そうな設定をいくつか書いておきます。

Gitで管理されているソースコードを対象としてvimgrep

Vimのコマンドモードでは任意のシェルコマンドが走るそうなので、それを使えば小題のようなこともできます。

:vimgrep[word] `git ls-list`

:cn(次の検索結果への移動)の簡略化

vimgrepでの検索結果の移動には:cnを打つ必要がありますが、数が多くなってくるとこれもわりとめんどくさいです。
これの簡略化方法としては、
① :cnをmapに登録する

~/.vimrc
nnoremap >:cn<CR>

② Quickfixを使う

~/.vimrc
autocmd QuickFixCmdPost vigrep cwindow$

の②通りが考えられますが、どちらでもお好みで良いかと思います。

参考文献(再掲含む)

  1. vimgrep & 検索と置換
    https://qiita.com/tsumac/items/3972d5347a5f6e37ca09

  2. vimのレジスタ
    https://qiita.com/0829/items/0b3f63798b6910623efc

  3. Vimのレジスタを使う
    https://qiita.com/a4_nghm/items/d29b35f5d056ef5da0d9

  4. 【vimめも】 10. マッピング
    https://qiita.com/r12tkmt/items/b89df403f587216802f1

  5. vimgrepとQuickfix知らないVimmerはちょっとこっち来い
    https://qiita.com/yuku_t/items/0c1aff03949cb1b8fe6b

VSCodeとVimでコーディング体操 ~語れる漢のコーディング環境をつくる~

$
0
0

みんなでコーディング体操です。
素早く、しなやかなコーディングをするためには、言語の学習だけではなく、エディタのカスタマイズが欠かせません。
ここでは、利用者の比較的多いVSCodeをベースに、伝統と格式のVimの機能や操作感を追加し、高速でコーディングすることを目指します。
毎日使っていれば、2週間ほどでVim式入力の方が早くなってきます。

まずは環境構築をこなし、基本動作を筋肉で覚え、
効率よくコーディング筋を追い込んでいきましょう。

はじめに

対象

  • コーディング入門者、初心者
  • とりあえずVSCodeを使っている人
  • VSCodeにVimを入れるという字面にときめいた人
  • VSCodeにさらなる力を与えたい人
  • 思考のスピードで編集したい人

Vimmerへの注意

あなたの.vimrc、init.vimは持ち込むことができません
(持ち込めるものがあれば教えてください)
キーバインド以外の設定やプラグインは、VSCodeの機能で置き換えることになります。
1から環境を移す気構えで望みましょう。

以下の記事を参考にしています。参考記事の方が解説が丁寧です。
https://qiita.com/y-mattun/items/45776b7e1942edb2f727

用意はできましたか?

環境準備

まずは最低限の設定を行います。
しっかり設定したい方は以下などを参考に、逞しいエディタを目指しましょう。
https://blog.mamansoft.net/2018/09/17/vscode-satisfies-vimmer/

VSCodeにVimを入れる

では始めます。
まずVSCodeがない方はインストールを行いましょう。
https://code.visualstudio.com/
用意する環境はMac/Linux/Winのどれでも結構です。
「インストールは長いけど、長くない」

次にVimの一部をVSCode内で使うため、拡張機能をインストールします。
(1)拡張機能をクリックし、(2)vimと検索し、(3)vimと書かれた拡張機能をインストールしましょう。
拡張機能 Vimのインストール
「設定ばかりでも、楽しんで」
これはVSCodeで動く、Vimのエミュレータという位置づけです。
完全ではありませんが、かなりVimに近い事ができます。
また、人気の高いプラグインの機能がはじめから入っていたりしますので、
次は設定を行っていきましょう。

settings.jsonの設定

VSCodeの設定はsettings.jsonに記述することでできます。
テキストベースで設定を書くことに抵抗のある方は、GUIで設定もできますが、
今後のためにjsonで書くようにしていきましょう。
「自分に甘えない」

まず Ctrl + ,で設定を出し、右上の {}マークを押し、settings.jsonを開きましょう。
jsonには書き方があるので、周りに沿って記述を行いましょう。
既に設定がある場合は、一番最後の閉じカッコ}の前行に記述を行い、更に前の行の設定をカンマで区切りましょう。

{"他の設定(プロパティ)":"値",//省略//"前の行のプロパティ":"値",←カンマがない場合はカンマを追加--一番下から一つ上の行(ここ)に設定を書きましょう--}

vim特有の設定は上記の通り書いていきます。
まずは以下の設定を書いておきましょう。
今後解説しますので、全て覚える必要はありません。
また、設定の// コメントは説明ですので、書かないようにしてください。
実際、jsonではコメントアウトができないので、コメントを書き残したい場合は"_comment": "コメント",などとプロパティで記述しましょう。
「ここでやめたら、後悔する」

{//省略////クリップボードとヤンクを共有「しない」"vim

  // 挿入モードのキーバインド
  "vim.insertModeKeyBindings": [
    // jjで挿入モードから<Esc>
    { "before": ["j", "j"], "after":["<Esc>"] }
  ],
  // ノーマルモードのキーバインド
  "vim.normalModeKeyBindings": [
    // 行頭行末への移動をH,Lに
    { "before": ["H"], "after": ["^"] },
    { "before": ["L"], "after": ["$"] }
  ]
}

終了です。

1分間休憩しましょう

wakatimeでモチベーション維持

休憩しながらお聞きください。
コーディングは毎日継続して行う事が重要ですが、一体今までどのぐらいのコードを書いてきたのか記録があると、モチベーションの維持に繋がります。
WakaTimeというサービスを利用することで、VSCodeと連携して、今までどの言語をどのぐらい書いてきたか、ということを記録することができます。
https://wakatime.com/
上記リンクからWakaTimeにサインアップし、VSCodeでもインストールを行っていきましょう。
参考: https://blog.kyoro.net/entry/2018/11/12/210930

また、SNSでの報告も、良いアウトプット、学習者相互の刺激になります。
Twitterでは#100DaysOfCodeというハッシュタグで、毎日のコーディングを報告し、モチベーションを高め合う事ができます。
ぜひ活用してみてください。

もうひと踏ん張りがんばりましょう

Vim風の基本動作

次はVimの基本動作についてです。
設定が終わったらVSCodeを再起動し、
Vim風の操作について筋肉で覚えていきましょう。

練習のために、以下のファイルを用意しました。
ダウンロードし、VSCodeで開きましょう。
gitがわかる方は、cloneしても結構です。
みんなでコーディング体操(Github)

開いたらまずは50音表の「あ」にカーソルを合わせましょう。
Vimでは左下上右の移動をh,j,k,lの4つのキーで行います。
Vimにはモードという物があり、一番最初のノーマルモードでは、文字が入力できません
そのかわり、移動や削除、ヤンク(≒コピー)に操作記録など、様々なコマンド、機能が備わっています。

このノーマルモードでの移動はh,j,k,lを使いますが、それぞれ、
h←, j↓, k↑, l→
と動きます。
DanceDanceRevolutionをひたすらやっていた方は、同じ配列であることに気づくかと思います。
やったことのない方は、筋肉で覚えていきましょう。

では、実践です。

これから以下に示すひらがなを、カーソルで追いかけていきましょう。
スタートです。

  • き ん に く

    「ホームポジションに、すぐ戻る!」

  • た け た

    「もっとスピード出ます。もっと出ますよ!」

  • む ら さ め

    「一つ終わっても休まず続けて!」

  • こ は や し

    「あと一つしかできない!」

  • た に も と

終了です。

文字の挿入(挿入モード)

次に挿入モードについてです。
先程、ノーマルモードでは文字が入力できない、と言いましたが、iで文字を挿入する挿入モードに変わることができます。
文字の入力が終わったら<Esc>をタイプすることでノーマルモードに戻ることができます。
上記の設定では、挿入モード中にjjとタップするだけで<Esc>と同じ効果になるよう設定をしています。
有名な設定ですので、こちらにも慣れていくと良いでしょう。

挿入モードに入る方法はiだけではなく、他にも様々な方法があります。
カーソル位置を基準に、このようになっています。

コマンド挿入位置
iカーソルのに挿入
aカーソルのに挿入
I(大文字アイ)に挿入
Aに挿入
oカーソルの後に行を追加して挿入
O(大文字オー)カーソルの前に行を追加して挿入

カーソルがではなくブロックである理由がこれです。
iは"insert"でに挿入、
aは"add"でに追加、
oは前後のです。
実際に挿入モードで記述して、筋肉で覚えていきましょう。

冗長な操作をしてしまった場合は、ノーマルモードに戻りuで操作をもとに戻します。
「自分に甘えない」
ストイックにコーディングを追い込んで行きましょう。

では、実践です。

先程の移動の練習の下、の字にカーソルを合わせましょう。
スタートです。

  • 操」の前に「みんなで」を挿入

    「すぐにノーマルモードに戻る!」

    答: Iみんなでjjもしくはiみんなでjj

  • 「みんな」の後に「筋肉」を挿入

    「頭で考えない!」

    答: a筋肉jj

  • 次の行に「凹凸のある腹筋をつくる」と挿入

    「無駄な動作をしない!」

    答: o(文章)jj

  • 次の行の「強靭な」のの前に「足腰」を挿入

    「常に最短経路を探して!」

    答: 「」にカーソル、a足腰jj

  • 行末に「つくる」を挿入

    「つらいけど、つらくない!」

    答: Aつくるjj

  • 前行に「語れる男の背中をつくる」と挿入
    **「最後まで、追い込んで!」

まとめ

いかがだったでしょうか。
最初のうちは、iしたあとにどうしても辛い時は、矢印キーやポインタで指定しても構いません。
毎日数分で終わりますので、少しずつなれるまで継続して取り組んでみましょう。

Vimは底知れぬ実力を持っています。
筋肉と違い、Vim力は毎日しっかりと使うことで成果が現れます。
コーディングと一緒にVim力も鍛え上げ、思考のスピードで編集することを目指しましょう。

コーディングは裏切らない...

暗黒さんのデフェックス defx アイコン付きで、みたく

$
0
0

Summary

暗黒さんのdefxをアイコン付きで

環境

(ins)$ uname-a
Darwin callmekoheis-MacBook-Air.local 18.6.0 
Darwin Kernel Version 18.6.0
: Thu Apr 25 23:16:27 PDT 2019
; root:xnu-4903.261.4~2/RELEASE_X86_64 x86_64

必要なフォント

$ brew cask install font-droidsansmono-nerd-font

必要なプラグイン

git clone --depth 1 https://github.com/Shougo/defx.nvim
git clone --depth 1 https://github.com/callmekohei/defx-icons
git clone --depth 1 https://github.com/ryanoasis/vim-devicons

vimrc

letg:defx_icons_enable_syntax_highlight=1letg:defx_icons_column_length=2

  autocmd MyAutoCmd VimEnter * calls:foofoo()functions:foofoo()call defx#custom#option('_',{        \'columns':'icons:filename',        \})endfunction

vimrc

ショートカット的な

" defxのヘルプをそのまま使う ( defx-examples )


    autocmd FileType defx calls:defx_my_settings()function!s:defx_my_settings() abort
      " Define mappings
      nnoremap <silent><buffer><expr><CR>      \ defx#do_action('open')
      nnoremap <silent><buffer><expr>c      \ defx#do_action('copy')
      nnoremap <silent><buffer><expr>m      \ defx#do_action('move')
      nnoremap <silent><buffer><expr>p      \ defx#do_action('paste')
      nnoremap <silent><buffer><expr>l      \ defx#do_action('open')
      nnoremap <silent><buffer><expr> E
      \ defx#do_action('open','vsplit')
      nnoremap <silent><buffer><expr> P
      \ defx#do_action('open','pedit')
      nnoremap <silent><buffer><expr>o      \ defx#do_action('open_or_close_tree')
      nnoremap <silent><buffer><expr> K
      \ defx#do_action('new_directory')
      nnoremap <silent><buffer><expr> N
      \ defx#do_action('new_file')
      nnoremap <silent><buffer><expr> M
      \ defx#do_action('new_multiple_files')
      nnoremap <silent><buffer><expr> C
      \ defx#do_action('toggle_columns',      \'mark:indent:icon:filename:type:size:time')
      nnoremap <silent><buffer><expr> S
      \ defx#do_action('toggle_sort','time')
      nnoremap <silent><buffer><expr>d      \ defx#do_action('remove')
      nnoremap <silent><buffer><expr>r      \ defx#do_action('rename')
      nnoremap <silent><buffer><expr>!      \ defx#do_action('execute_command')
      nnoremap <silent><buffer><expr>x      \ defx#do_action('execute_system')
      nnoremap <silent><buffer><expr> yy
      \ defx#do_action('yank_path')
      nnoremap <silent><buffer><expr>.      \ defx#do_action('toggle_ignored_files')
      nnoremap <silent><buffer><expr> ;
      \ defx#do_action('repeat')
      nnoremap <silent><buffer><expr>h      \ defx#do_action('cd',['..'])
      nnoremap <silent><buffer><expr>~      \ defx#do_action('cd')
      nnoremap <silent><buffer><expr>q      \ defx#do_action('quit')
      nnoremap <silent><buffer><expr><Space>      \ defx#do_action('toggle_select').'j'
      nnoremap <silent><buffer><expr> *
      \ defx#do_action('toggle_select_all')
      nnoremap <silent><buffer><expr>j      \ line('.')== line('$') ? 'gg':'j'
      nnoremap <silent><buffer><expr>k      \ line('.')==1 ? 'G':'k'
      nnoremap <silent><buffer><expr><C-l>      \ defx#do_action('redraw')
      nnoremap <silent><buffer><expr><C-g>      \ defx#do_action('print')
      nnoremap <silent><buffer><expr>cd      \ defx#do_action('change_vim_cwd')endfunction

こんな感じ

フォルダに移動してvimを立ち上げる

Screen Shot 2019-07-13 at 12.13.50.png

Defx

Screen Shot 2019-07-13 at 12.13.56.png

ファイルが一覧される

Screen Shot 2019-07-13 at 12.13.59.png

フォルダの上で'o'を押す

Screen Shot 2019-07-13 at 12.14.04.png

ファイルの上でにカーソルをもってくる 'j'

Screen Shot 2019-07-13 at 12.14.10.png

リターン

Screen Shot 2019-07-13 at 12.14.14.png

その他

256でアイコンに色つけるのなんとなく作者さんとこ見たくなさそうなので、みんなで取り入れてとpingしてもらえると嬉しいです!:-)

Screen Shot 2019-07-13 at 12.24.12.png

Available xterm256 #7


Kindle fire上で動くtermuxのvimでskk日本語入力をする

$
0
0

Kindle fireでtermuxを使うとCUIが使えて楽しいのだけれども,標準状態だと日本語入力ができない.全部英語で書けば解決しそうだがせっかくなのでskkを入れて日本語を打てるようにしたい.

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

deinを使ってるのでtomlファイルに欲しいものを書く.

[[plugins]]
repo = 'tyru/skk-vim'

[[plugins]]
repo = 'vim-jp/autofmt'

tyru/skk-vimがメインのskkしてくれる子.vim-jp/autofmtは日本語の整形をしてくれる子らしい(具体的に何をしてるか知らない).
Vimを立ち上げ直すとインストールが始まるので待つ.

skk辞書を入れる

とりあえずlarge辞書入れればいいと思った.
まず辞書ファイルをダウンロード,その後解凍.辞書ディレクトリを作ってそこに置く.

$Curl openlab.jp/skk/dic/SKK-JISYO.L.gz -o SKK-JISYO.L.gz
$gzip -d SKK-JISYO.L.gz
$mkdir .skk-dic
$mv SKK-JISYO.L .skk-dic/SKK-JISYO.L

辞書ファイルの文字コードを変更

ダウンロードした辞書ファイルをそのまま使おうとすると漢字への変換が上手くいかない.そのため辞書ファイルの文字コードを変更する.
実際にSKK-JISYO.Lをvimで開いて

:set fenc?

を叩くとeuc-jpと帰ってくる.これをutf-8にしたい.
SKK-JISYO.LからSKK-JISYOutf-8.Lみたいな名前のコピーを作ってからvimのコマンドラインで

:set fenc=utf-8

をすると上手くいく.

.vimrcの設定

必要なものが揃ったので.vimrcに色々書き込んでいく.

"skk-vim options
let g:skk_large_jisyo = '~/.skk-dic/SKK-JISYOutf-8.L'
let  g:skk_egg_like_newline=1

"autofmt option
set formatexpr=autofmt#japanese#formatexpr()

skk_large_jisyoに辞書ファイルの場所を入れてあげる.skk_egg_like_newlineを1にすると入力確定時のenterキーによる改行を無視してくれる.set formatexpr=autofmt#japanese#formatexpr()はautofmtによる日本語整形機能の有効化させる.

おわり

これで日本語入力できるようになりました.やったね.
まぁ英語で書いた方が楽なんですけどね.

参考ページ

skk.vim を導入しました | だえもんのブログ
Vim のすゝめ - Vim と日本語 | 株式会社創夢 — SOUM/misc

VimでDockerコンテナを操作する

$
0
0

こんにちわ。
ゴリラ.vimを運営しているゴリラです。

みなさんVimとコンテナは好きですか?
普段VimでDockerfileを書いたりする時にコンテナの状態気になりませんか?
あの子元気かな?とか、この子今起きているかなとか、いろいろ気になると思います。

そんな方むけにVimからコンテナを操作したり、監視したりするプラグインを作ってみました。

どういうやつ?

docker.vim.gif

できること

現時点で以下のことができます。
のんびり開発中でまだ実装したい機能がありますが、とりあえず形になったので公開しました。

images

  • get images
  • delete image
  • pull image

containers

  • start/stop/restart/kill container
  • delete container
  • attach container(require docker command)
  • monitoring container CPU/MEM

使い方

READMEを参照してください。
コマンドとキーバインドがあります。基本一覧ではキーバインドを使った操作になります。
例えば、:DockerContainersでcontainers画面を開き、uでコンテナ起動、sでコンテナを停止します。

おすすめポイント

Vimを止めることなくattachしつつ、CPUやMEMの使用率を監視できる機能が推しです。
ただ、モニターに関しては現在Mac/Linuxしか対応していないので、今後Windowsも対応していく予定です。

attachに関しては、裏でdocker exec -it {container} {cmd}というふうに実行しているので、dockerコマンドが必要になってきます。

仕組み

API通信は裏でcurlを使っています。
curl --unix-socket /var/run/docker.sock http://localhost/containers/jsonという感じでコマンドを実行しています。
こちらはvitalというライブラリのweb.httpモジュールを使っています。
プラグインで使いやすいように、それを更にすこしwarapした関数を用意しました。

" http getfunction! docker#api#http#get(url, param) abort
    returns:HTTP.request(a:url,{                \'unixSocket':'/var/run/docker.sock',                \'param':a:param                \})endfunction

あとは docker#api#http#geturlqueryparameterを渡せば良いだけです。簡単ですね。

一覧表示ではテーブルを使っています。こちらに関しては、text.tableモジュールを使用しています。
こちらを使用すれば簡単にテーブルを作れます。とても便利ですね。

" ヘッダとカラム数を指定してtableオブジェクトを作るletl:image_table =s:TABLE.new({            \'columns':[{},{},{},{},{}],            \'header':['ID','REPOSITORY','TAG','CREATED','SIZE'],            \})" curlのレスポンスを1行ずつ整形してテーブルに追加for row ina:ctx.content[a:ctx.offset:a:ctx.offset +a:ctx.top-1]letl:image = docker#util#parse_image(row)calll:image_table.add_row([                \l:image.Id,                \l:image.Repo,                \l:image.Tag,                \l:image.Created,                \l:image.Size])endfor" table.stringify()で実際のテーブルテキストを出力leta:ctx.view_content =l:image_table.stringify()

ざっくりですが、実はそんな難しいことはしていなくて、
裏でDocker EngineのAPIを叩いて結果に応じてVimのポップアップウィンドウを使っていい感じにインターフェイスを用意して操作する感じです。

最後に

このプラグインはまだ開発途中です。
バグや要望があればissueやPRをください。みなさんの意見・要望・PRがたくさん来ることを楽しみにしています。

【vim】denite.nvim v3のマイベスト設定

$
0
0

以前からdenite.nvimを愛用していたのですが、v3のアップデートでもろもろと変わったので、設定を修正するついでにfloating windowを活用するように修正しましたので、紹介します。

機能

  • :Dgrepでgrep
  • :Dresumeで検索結果を再度開く
  • :Dnext, :Dprevで前後の検索結果へ移動

動作イメージ

:Dgrep:Dresume
denite_01.gif

:Dprev:Dnext
denite_02.gif

.vimrc

augroup denite_filter
  autocmd FileType denite calls:denite_my_settings()function!s:denite_my_settings() abort
    nnoremap <silent><buffer><expr><CR>    \ denite#do_map('do_action')
    nnoremap <silent><buffer><expr>d    \ denite#do_map('do_action','delete')
    nnoremap <silent><buffer><expr>p    \ denite#do_map('do_action','preview')
    nnoremap <silent><buffer><expr>q    \ denite#do_map('quit')
    nnoremap <silent><buffer><expr>i    \ denite#do_map('open_filter_buffer')
    nnoremap <silent><buffer><expr><Space>    \ denite#do_map('toggle_select').'j'endfunction
augroup END
" use floatinglets:denite_win_width_percent=0.85lets:denite_win_height_percent=0.7lets:denite_default_options={    \'split':'floating',    \'winwidth': float2nr(&columns * s:denite_win_width_percent),    \'wincol': float2nr((&columns -(&columns * s:denite_win_width_percent)) / 2),    \'winheight': float2nr(&lines * s:denite_win_height_percent),    \'winrow': float2nr((&lines -(&lines * s:denite_win_height_percent)) / 2),    \'highlight_filter_background':'DeniteFilter',    \'prompt':'$ ',    \'start_filter':v:true,    \}lets:denite_option_array=[]for[key, value]in items(s:denite_default_options)call add(s:denite_option_array,'-'.key.'='.value)endforcall denite#custom#option('default',s:denite_default_options)call denite#custom#var('file/rec','command',    \['ag','--follow','--nocolor','--nogroup','-g',''])call denite#custom#filter('matcher/ignore_globs','ignore_globs',    \['.git/','.ropeproject/','__pycache__/',    \'venv/','images/','*.min.*','img/','fonts/'])" Ag command on grep sourcecall denite#custom#var('grep','command',['ag'])call denite#custom#var('grep','default_opts',['-i','--vimgrep'])call denite#custom#var('grep','recursive_opts',[])call denite#custom#var('grep','pattern_opt',[])call denite#custom#var('grep','separator',['--'])call denite#custom#var('grep','final_opts',[])" grep
command!-nargs=? Dgrep calls:Dgrep(<f-args>)functions:Dgrep(...)ifa:0>0
    execute(':Denite -buffer-name=grep-buffer-denite grep -path='.a:1)else
    execute(':Denite -buffer-name=grep-buffer-denite '.join(s:denite_option_array,' ').' grep')endifendfunction" show Denite grep results
command! Dresume execute(':Denite -resume -buffer-name=grep-buffer-denite '.join(s:denite_option_array,' ').'')" next Denite grep result
command! Dnext execute(':Denite -resume -buffer-name=grep-buffer-denite -cursor-pos=+1 -immediately '.join(s:denite_option_array,' ').'')" previous Denite grep result
command! Dprev execute(':Denite -resume -buffer-name=grep-buffer-denite -cursor-pos=-1 -immediately '.join(s:denite_option_array,' ').'')" keymapcall denite#custom#map('insert','<C-n>','<denite:move_to_next_line>','noremap')call denite#custom#map('insert','<C-p>','<denite:move_to_previous_line>','noremap')

環境

使用しているneovimのバージョンは下記です。
※floating windowを利用しているので、v0.4以上が必要です。

$ vi --version

NVIM v0.4.0-dev
Build type: RelWithDebInfo
LuaJIT 2.1.0-beta3

参考

[vim]denite.nvimのgrepの検索結果をquickfixみたいに移動する
【Vim】新しい Denite に爆速で対応する

Vim patchダイジェスト [2019/06]

$
0
0

Vimのリリースされたpatchの説明です。patchの内容を確認し、必要であれば動作確認をおこなったうえで書いています。英語を忠実に訳すよりは、Vimを使っている人が理解しやすい文章になるように心がけています。
新機能、大幅な仕様変更には、:four_leaf_clover:が付いています。
(8.1.14378.1.1612)

  • 8.1.1612: :four_leaf_clover:popup_create()の第1引数にバッファ番号を指定できるようにしました。(関連patch: 8.1.1391, 8.1.1438)
  • 8.1.1610: :four_leaf_clover:bufadd()bufload()を追加しました。副作用なしでバッファの追加/ロードがおこなえます。(関連patch: 8.1.1611)
  • 8.1.1609: :four_leaf_clover:popup_create()のオプションにcloseを追加しました。ポップアップウィンドウをマウスの右クリックで閉じる設定ができます。(関連patch: 8.1.1391, 8.1.1438)
  • 8.1.1608: :alien:evalfunc.c が大きくなりすぎたため、目印(sign)関連の関数を sign.c に移動しました。(関連patch: 8.1.1584)
  • 8.1.1607: :four_leaf_clover:ポップアップウィンドウのスクロールバーがクリックに反応しない券を修正しました。popup_create()のオプションにscrollbarhighlightthumbhighlightを追加しました。スクロールバー関連のハイライトを指定します。※gitのcommitログはミスっている。(関連patch: 8.1.1391, 8.1.1438)
  • 8.1.1593: :four_leaf_clover:拡張子のないファイルで1行目がEmacsのファイルモード指定でC++の場合はファイルタイプを cpp として認識するようにしました。
  • 8.1.1589: :four_leaf_clover:popup_create()のオプションにscrollbarを追加しました。TRUE時でテキストが収まらない場合にスクロールバーを表示します。(関連patch: 8.1.1391, 8.1.1438, 8.1.1597, 8.1.1600)
  • 8.1.1584: :alien:evalfunc.c が大きくなりすぎたため、チャネルとジョブ関連の関数を channel.c に移動しました。(関連patch: 8.1.1608)
  • 8.1.1580: :four_leaf_clover:popup_create()のオプションにmaskを追加しました。リストのリストでポップアップウィンドウ内の透過領域を指定します。(関連patch: 8.1.1391, 8.1.1438)
  • runtimeファイル更新: Todo更新。helpファイル更新。他。
  • 8.1.1579: :four_leaf_clover:タイマー実行中はGCをブロックするようにしました。test_garbagecollect_soon()を追加しました。test_override()の指定値にno_wait_returnを追加しました。
  • 8.1.1574: :four_leaf_clover:popup_create()のオプションのtabpageの -1 と 0 以外の挙動を実装しました。(関連patch: 8.1.1391, 8.1.1438)
  • 8.1.1565: :four_leaf_clover:Windows: 音声再生をサポートしました。(関連patch: 8.1.1502)
  • 8.1.1564: :four_leaf_clover:'signcolumn'の指定値にnumberを追加しました。指定時は'number'(行番号)の桁に目印(sign)を表示します。(関連patch: 8.1.1570, 8.1.1587)
  • 8.1.1561: :four_leaf_clover:popup_setoptions()を実装しました。(関連patch: 8.1.1391, 8.1.1438)
  • 8.1.1560: :four_leaf_clover:popup_create()のオプションにhiddenを追加しました。(関連patch: 8.1.1391, 8.1.1438)
  • 8.1.1559: :four_leaf_clover:popup_create()のオプションにtitleを追加しました。(関連patch: 8.1.1391, 8.1.1438)
  • 8.1.1558: :four_leaf_clover:popup_menu()popup_filter_menu()を実装しました。(関連patch: 8.1.1391, 8.1.1438)
  • 8.1.1553: :four_leaf_clover:popup_settext()を追加しました。ポップアップウィンドウのテキストの変更が容易になりました。(関連patch: 8.1.1391, 8.1.1438)
  • 8.1.1548: :four_leaf_clover:popup_dialog()popup_filter_yesno()を実装しました。(関連patch: 8.1.1391, 8.1.1438)
  • 8.1.1542: :four_leaf_clover:v:option_command, v:option_oldlocalおよびv:option_oldglobalを追加しました。OptionSet自動コマンドで取得できる情報が不足しているのを改善しました。
  • 8.1.1539: :four_leaf_clover::constを追加しました。変数の定義とロック(値変更不可)が簡単に記述できるようになりました。(関連patch: 8.1.1554)
  • 8.1.1538: :four_leaf_clover:ハイライトグループPopupNotificationを追加しました。定義されている場合は、popup_notification()のハイライトに使われます。(関連patch: 8.1.1391, 8.1.1438)
  • 8.1.1537: :four_leaf_clover:popup_create()のオプションのtabtabpageに名称変更しました。
  • 8.1.1526: :four_leaf_clover:v:versionlongを追加しました。patchレベルを含んだバージョン番号が設定されています。
  • 8.1.1525: :four_leaf_clover:popup_create()のオプションにdragを追加しました。TRUE時はポップアップウィンドウのボーダー部分をマウスでドラッグできます。(関連patch: 8.1.1391, 8.1.1438)
  • 8.1.1523: :four_leaf_clover:popup_create()のオプションにfirstlineを追加しました。ポップアップウィンドウに表示する最初の行を指定します。(関連patch: 8.1.1391, 8.1.1438)
  • 8.1.1522: :four_leaf_clover:popup_notification()を実装しました。(関連patch: 8.1.1391, 8.1.1438)
  • runtimeファイル更新: Todo更新。helpファイル更新。他。
  • 8.1.1513: :four_leaf_clover::popupclearを削除してpopup_clear()を追加しました。sound_stopall()sound_clear()に名称変更しました。(関連patch: 8.1.1391, 8.1.1438, 8.1.1502)
  • 8.1.1510: :four_leaf_clover:expandcmd()を追加しました。:edit等のように{expr}を展開します。
  • 8.1.1509: 複数定義のある関数へのgtagsを使ったタグジャンプでVimがクラッシュすることがある件を修正しました。
  • 8.1.1502: :four_leaf_clover:sound_playevent(), sound_playfile(), sound_stop(), sound_stopall()を追加しました。音声を再生します。(関連patch: 8.1.1503, 8.1.1504, 8.1.1506, 8.1.1507, 8.1.1508, 8.1.1513, 8.1.1529, 8.1.1565)
  • runtimeファイル更新: :four_leaf_clover:typescript用のsyntaxファイルindentファイルを追加。Todo更新。helpファイル更新。他。
  • runtimeファイル更新: Todo更新。helpファイル更新。他。
  • 8.1.1464: :four_leaf_clover:端末のfore/background color responseのrr/gg/bb形式に対応しました。(関連patch: 8.1.1471, 8.1.1481)
  • 8.1.1458: gtagsを使うとVimがクラッシュする場合があるのを修正しました。
  • 8.1.1453: :four_leaf_clover:popup_create()のオプションのmovedを実装しました。カーソルを動かした場合にポップアップウィンドウを閉じる条件を指定します。(関連patch: 8.1.1391, 8.1.1438)
  • 8.1.1447: :four_leaf_clover:テキストが空のポップアップウィンドウを作成できるようにしました。(関連patch: 8.1.1391, 8.1.1438)
  • 8.1.1446: :four_leaf_clover:popup_create()のオプションのcallbackを実装しました。ポップアップウィンドウが閉じられた時に呼ばれます。(関連patch: 8.1.1391, 8.1.1438)
  • 8.1.1445: :four_leaf_clover:popup_create()のオプションのborderhighlightを実装しました。ポップアップウィンドウのボーダーのハイライト名をリストで指定します。(関連patch: 8.1.1391, 8.1.1438)
  • 8.1.1444: :four_leaf_clover:'encoding'utf-8の場合はポップアップウィンドウのボーダー文字に2重罫線を使用するようにしました。(関連patch: 8.1.1391, 8.1.1438, 8.1.1459, 8.1.1460)
  • 8.1.1443: :four_leaf_clover:popup_create()のオプションのpaddingborderを実装しました。また、popup_getpos()が返す辞書のエントリにcore_~を追加しました。(paddingとborderを含まない値を持ちます) (関連patch: 8.1.1391, 8.1.1438)
  • 8.1.1441: :four_leaf_clover:popup_create()のオプションのfilterを実装しました。ポップアップウィンドウのキー入力のフィルタリングをおこないます。(関連patch: 8.1.1391, 8.1.1438)
  • 8.1.1439: json_encode()が巨大な結果となる場合に非常に処理が遅い件を修正しました。
  • 8.1.1438: ポップアップウィンドウ内で問題が発生するコマンドがあるのを修正しました。コマンドを実行せずにエラーE994を出力します。(関連patch: 8.1.1391, 8.1.1441, 8.1.1442, 8.1.1443, 8.1.1444, 8.1.1445, 8.1.1446, 8.1.1447, 8.1.1448, 8.1.1450, 8.1.1451, 8.1.1452, 8.1.1453, 8.1.1455, 8.1.1459, 8.1.1460, 8.1.1493, 8.1.1496, 8.1.1499, 8.1.1511, 8.1.1513, 8.1.1517, 8.1.1518, 8.1.1520, 8.1.1521, 8.1.1522, 8.1.1523, 8.1.1525, 8.1.1527, 8.1.1528, 8.1.1534, 8.1.1535, 8.1.1536, 8.1.1537, 8.1.1538, 8.1.1548, 8.1.1550, 8.1.1551, 8.1.1553, 8.1.1555, 8.1.1558, 8.1.1559, 8.1.1560, 8.1.1561, 8.1.1562, 8.1.1574, 8.1.1580, 8.1.1590. 8.1.1596, 8.1.1597, 8.1.1598, 8.1.1600, 8.1.1601, 8.1.1602, 8.1.1604, 8.1.1607, 8.1.1609, 8.1.1612)

凡例

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

方針

こちらを参照。

【VScode】vim拡張機能でノーマルモードに戻る時に合わせて英数入力に切り替える

$
0
0

VScodeのvimの拡張機能を追加した状態で日本語のテキストを入力した後、ノーマルモードに戻った時に明示的に英数入力に切り替える操作が面倒だったので、
自動でに切り替える方法がないか調べたらドキュメントに設定方法の記載が見つかりました。
以下はMac向けですが他OSの設定方法もドキュメントに記載があります。

im-selectの準備

ドキュメント記載の方法ではim-selectというコマンドラインツールを使います。

インストール

以下のコマンドでインストールを行います。

curl -Ls https://raw.githubusercontent.com/daipeihust/im-select/master/install_mac.sh | sh

インストール後コマンドが実行できる状態になっていればOKです。

$ curl -Ls https://raw.githubusercontent.com/daipeihust/im-select/master/install_mac.sh | sh
* Downloading im-select...
* im-select is installed!

$ which im-select
/usr/local/bin/im-select

im-selectの使い方、動作確認

現在の入力状態(imkey)の確認

インストール後im-selectコマンドを実行すると現在の入力状態を表すパラメータ(imkey)が取得できます。
自分のgoogle日本語入力を使っている環境では以下の値が表示されました。このパラメータは各自の環境で異なったものになると思います。

# 英数入力状態の実行結果
$ im-select
com.google.inputmethod.Japanese.Roman

# 日本語入力状態の実行結果
$ im-select
com.google.inputmethod.Japanese.base

指定のimkeyへの切り替え

先程のパラメータを以下のようにim-selectに指定してあげることで入力状態の切り替えを行うことができます。
先程取得したパラメータを指定して入力状態の切り替えができればim-select側の準備は完了です。

# 英数入力へ切り替え
im-select com.google.inputmethod.Japanese.Roman

# 日本語入力へ切り替え
im-select com.google.inputmethod.Japanese.base

vscode側の切り替え設定

vim拡張機能には入力切り替え用に以下の設定項目があります。
それぞれ設定してあげることでim-selectコマンドの切り替えが実行され、ノーマルモードに切り替えた際に合わせて英数入力へ切り替わるようになります。

設定値説明
vim.autoSwitchInputMethod.enableインサートモードを抜けた際のコマンド実行の有効/無効
vim.autoSwitchInputMethod.defaultIMデフォルト(ノーマルモード時)の入力状態を表すパラメータ
vim.autoSwitchInputMethod.obtainIMCmd現在の入力状態のパラメータを取得するコマンドのフルパス
vim.autoSwitchInputMethod.switchIMCmd入力状態の切り替えを行うコマンドのフルパス。 {im}部分には上記のデフォルト入力状態のパラメータが自動的に置換されて入力されます

今回の場合は以下のような設定値になります。

"vim.autoSwitchInputMethod.enable":true,"vim.autoSwitchInputMethod.defaultIM":"com.google.inputmethod.Japanese.Roman","vim.autoSwitchInputMethod.obtainIMCmd":"/usr/local/bin/im-select","vim.autoSwitchInputMethod.switchIMCmd":"/usr/local/bin/im-select {im}"

設定画面では以下のような感じになると思います。

vscode-vim-setting.png

この設定を反映後、vimのインサートモードからノーマルモードの切り替えのタイミングで入力状態も英数入力へ切り替わっていれば設定完了です。

個人的なVim入門

$
0
0

はじめに

Vim幼稚園からVim小学校への記事がとても面白かったので、私も備忘録的に残します。
思い出しながら書いているので多少の前後はあるかもしれませんが、レベル感は雑に小刻みにレベルアップすることにして今後も書き足していけたらなと思います。
まだまだ使いこなしてはいませんが、Mac,Ubuntuを普段使いしていてVimを日常的に使用しています(まだVim幼児ぐらい笑)。

使うことになった経緯

Ubuntuを使うことになりました。ドットファイルや/etc/...を編集する際にターミナルから開けるエディタということで使い始めました。

色々な方がコマンドリストなどを紹介していると思いますが、最初から完璧に覚えるというより必要になるごとに適宜使えるコマンドを増やしていくとよいのかなと思っています。(一気に覚えようとしても無理だと思います)

レベル0

  • インサートモードiで←↓↑→キー移動
  • 何も分からずEscキーから:wqで保存終了
  • sudoで開くのを忘れて困った時は:q!で終了

レベル1

  • インサートモードとノーマルモードの存在に気づく
  • まだ移動はh,j,k,lのみ
  • yypを使える

レベル2

  • i,s,aを使い分けられる
  • u, Ctrl+rを使える
  • .vimrcをネットから拾ってきて設定
  • gg, Gも移動に組み込める
  • /...で検索、n, Shift+nで上下移動
  • xで文字削除
  • ddで行削除&ヤンク
  • :set numberの存在に気づく

レベル3

  • .vimrcを作成
  • ビジュアルモードvの存在に気づく
  • Visual+y, Visual+dで一気にヤンク,ヤンク&削除ができる
  • :split, :vsplitからの:open path/to/fileで他のファイルを同時に開ける(Ctrl+wで移動できる)
  • 移動にCtrl+u, Ctrl+dを使える
  • tmuxと組み合わせるようになり、キーボードからあまり手を離さなくなる

レベル4

  • 行ビジュアルモードCtrl+vの存在に気づく
  • :new, :vnewからの:e .で他のファイルを開ける
  • 矩形ビジュアルモードShift+vの存在に気づく
  • ggVGyで文書全体ヤンクを使える
  • :s/before/afterで置換できる
  • :%s/before/after/gで文書全体置換できる
  • vimium, vimium-ffの存在に気づく

レベル5

  • 矩形ビジュアルモードShift+vの存在に気づく
  • コメントアウト、アンコメントアウトのショートカットを作成
  • コンパイル、実行のショートカットを作成
  • Windowsにもvimをインストール(tmuxが使えず不便、上記ショートカットで対応)
  • WindowsでWSLをインストールしてvimを使用(遅いから不便)
  • VSCodeでvimキーバインドを使用(:eが使えず不便,Intellisense便利)

レベル6

  • macの購入とともにvimの使用頻度上昇
  • Ctrl+pが使える
  • この頃から日常生活に支障(他のエディタが使いづらい問題,jk連打してしまう)
  • Visual+y, Visual+dの有効活用
  • xでヤンクしないように設定
  • Visual+sが使える
  • %で対応括弧へ移動
  • fで該当文字まで移動できることを知っている(が使わない)
  • 0で行頭まで移動できることを知っている(が使わない)

レベル7

  • zf, zd, zm, zr等のfoldingが使える
  • Visual+...で一部だけ置換できることに気づく
  • .が使える
  • @:が使える
  • q:が使える
  • /検索でスッと移動
  • zz, ztで文書の見え方を変更できる

レベル8

  • ターミナルのカーソルをブロック→垂直バーに変更したらi,a,sを意識できるようになった
  • 矩形ビジュアルモードで一気に文字を追加できる
  • $で行末に移動できることを知っている(が使わない)
  • 矩形ビジュアルモードに$+Aで末尾に一気に文字追加できる
  • Ctrl+a, Ctrl+xでインクリメント、デクリメントできる

vimの入門的なコマンド

$
0
0

どんな人向け

  • vim初心者
  • diffとか logを閲覧する人
  • CUI環境でちょっと編集したい人
  • 重いテキストを手軽に閲覧したい人

基本コマンド

これを知っていればvimは一応操作できるだろうコマンド

キーアクション
h・j・k・l←・↓・↑・→ カーソル移動
i文字入力モードへ
escノーマルモードへ
:wq変更を保存してvim終了
:q!変更を破棄してvim終了
  • 焦って間違えて変更してしまったら escでノーマルモードにしてから :q!でvimを一度終了してやり直す
  • ノーマルモードへの移行は escより control + [を使用するとスムーズ (な気がする

閲覧によく使うコマンド

キーアクション
control + d半ページ下へ移動
control + u半ページ上へ移動
gg一番上の行に移動
G一番下の行に移動
/文字列文字列を検索
n次の文字列を検索
N前の文字列を検索
  • 死ぬほど長い logを閲覧するときに必須なコマンド
  • vimtutor (vimのチュートリアルコマンド)で閲覧の練習してみると良い

編集によく使うコマンド

キーアクション
x1文字削除
dd1行削除
u一つ前の変更を戻す(Undo)
control + rUndoを取り消す(Redo)
.一つ前にしたアクションをもう一度行う
vビジュアルモードへ
yyコピー(ヤンク)
pペースト
  • ちょっと編集として使うなら覚えた方が良いコマンド
  • ビジュアルモードは文字列を選択し、コピペ等に使えるモード

おわりに

個人的によく使うコマンドだけ載せました:triumph:
他にもいろいろ探してみてください!

参考文献様

よく使う Vim のコマンドまとめ
Vim初心者向け:Vimの使い方が分かるコマンド - "vimtutor"


Vimで単語のキャメル、スネーク、ケバブを切り替える

$
0
0

たまに欲しくなるけどさっと調べてもいい感じの方法が見つからず、そこまで必要に迫られてもなくて毎回手作業していた変換をやっとコマンドにしたメモ。
マップは空いていそうなキーへ適当に。

nnoremap <Space>c viw:s/\%V\(_\\|-\)\(.\)/\u\2/g<CR>
nnoremap <Space>_ viw:s/\%V\([A-Z]\)/_\l\1/g<CR>
nnoremap <Space>- viw:s/\%V\([A-Z]\)/-\l\1/g<CR>
xnoremap <Space>c:s/\%V\(_\\|-\)\(.\)/\u\2/g<CR>
xnoremap <Space>_ :s/\%V\([A-Z]\)/_\l\1/g<CR>
xnoremap <Space>-:s/\%V\([A-Z]\)/-\l\1/g<CR>

スネーク <-> ケバブの変換は使うシーンがなさそうなので略。

参考サイト
https://qiita.com/annyamonnya/items/f003fd671fecaf55c9e7
https://nanasi.jp/articles/howto/editing/replace-selecttext.html

Amazon Linux に最新のdeinをインストール

$
0
0

以前はVimのパッケージ管理にはNeoBundleを使っていましたが、久しぶりにLinuxを触ってみたらdeinなるものが使えるという事ですので試してみました。

環境

Amazon Linux のバージョンを確認する方法

実行結果

[ec2-user@ip-172-31-44-114 ~]$ cat /etc/system-release
Amazon Linux release 2 (Karoo)

Vimのバージョンアップ

deinのインストールは、
dein.vimでプラグイン管理の始め方
を参考に、ほばそのまま使わせて頂きましたが、異なる点は、

  • MacとLinuxの違いで、Vimの設定ファイルの位置が、~/.cofig/nvim/init.vim→ ~/.vimrc
  • deinのインストールディレクトリは ~/.vim/bundles (ただ何となく、githubのreadmeの最初にあったので)
  • lazyで読み込む必要があるプラグインが(とりあえず)無かったので、dein_lazy.tomlの設定は無し
  • ひとまずdeinがインストール出来るかどうか確認するため、dein.tomlの中身は空
~/.vimrc
1setnumber2set expandtab
  3set tabstop=44set shiftwidth=45set smartindent
  6set backspace=indent,eol,start78if&compatible
  9set nocompatible
 10endif1112lets:dein_dir= expand('~/.vim/bundles')1314lets:dein_repo_dir=s:dein_dir.'/repos/github.com/Shougo/dein.vim'1516if&runtimepath !~# '/dein.vim'17if!isdirectory(s:dein_repo_dir)18         execute '!git clone https://github.com/Shougo/dein.vim's:dein_repo_dir19endif20     execute 'set runtimepath^='. fnamemodify(s:dein_repo_dir,':p')21endif2223if dein#load_state(s:dein_dir)24call dein#begin(s:dein_dir)25lets:toml_dir= expand('~/.vim/toml')26call dein#load_toml(s:toml_dir.'/dein.toml',{'lazy':0})27call dein#end()28call dein#save_state()29endif3031filetype plugin indent on32 syntax enable
 3334if dein#check_install()35     dein#install()36endif

上記の内容を保存し、もう一度Vimを起動すると以下のエラーが発生

[ec2-user@ip-172-31-44-114 ~]$ vi .vimrc
Error detected while processing function dein#begin..dein#util#_begin..dein#util#_error..<SNR>10_msg2list:
line    1:
E121: Undefined variable: v:t_list
E15: Invalid expression: type(a:expr) ==# v:t_list ? a:expr : split(a:expr, '\n')
Error detected while processing function dein#begin..dein#util#_begin..dein#util#_error:
line    1:
E714: List required
Error detected while processing /home/ec2-user/.vimrc:
line   31:
E492: Not an editor command: enable syntax
Press ENTER or type command to continue

エラーメッセージからググってみると:
centosのデフォルトのvimで最新のdeinを使おうとしたらハマった話
インストールしたdeinのバージョンに対して、Vimのバージョンが古すぎる、という事のようです。

[ec2-user@ip-172-31-44-114 ~]$ vim -version
VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Jul 27 2018 06:04:47)
Garbage after option argument: "-version"
More info with: "vim -h"

上記では対応策としてdeinのバージョンを下げていますが、私はアプリケーションは出来るだけ新しいものを使う主義のため、Vimのバージョンを上げる事にしました。
CentOSでvimを7→8にバージョンアップする
足りないものはエラーになったら入れればいいやと思ったので、yum install関連の対応はとりあえずスキップ。vim.gitのクローンから始めます。
~/.vim/srcというディレクトリを作って、

git clone https://github.com/vim/vim.git

~/.vim/srcの中身はこんな感じ:

appveyor.yml  configure        Filelist  nsis     READMEdir  README.txt  src    uninstal.txt  vimtutor.com
ci            CONTRIBUTING.md  Makefile  pixmaps  README.md  runtime     tools  vimtutor.bat

ここで、

make

とすると、最初に依存性を解決するステップをスキップしているので、やはりエラーになります。

no terminal library found
checking for tgetent()... configure: error: NOT FOUND!
      You need to install a terminal library; for example ncurses.
      Or specify the name of the library with --with-tlib.
make[2]: *** [config] Error 1
make[2]: Leaving directory `/home/ec2-user/.vim/src/vim/src'
make[1]: *** [reconfig] Error 2
make[1]: Leaving directory `/home/ec2-user/.vim/src/vim/src'
make: *** [first] Error 2

develは怒られたら入れてみようという方針で、とりあえずncursesを入れて様子を見てみます:
(後記:やはり必要でした…)

[ec2-user@ip-172-31-44-114 vim]$ sudo yum install ncurses
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
Package ncurses-6.0-8.20170212.amzn2.1.2.x86_64 already installed and latest version
Nothing to do

あれ?ncurses入ってるっぽい。無いと言っているのはヘッダファイル?ということで、気を取り直して、

sudo yum install ncurses-devel

今度はmake, sudo make install共にうまくいきました。(長いので、ログは割愛。)

[ec2-user@ip-172-31-44-114 vim]$ vim -version
VIM - Vi IMproved 8.1 (2018 May 18, compiled Jul  7 2019 07:55:02)
Garbage after option argument: "-version"
More info with: "vim -h"

次は、本題の、Vimの起動(deinはうまく動くか?)。まずはそのまま起動してみます。

[ec2-user@ip-172-31-44-114 vim]$ vim .vimrc
[dein] Invalid toml format: /home/ec2-user/.vim/toml/dein.toml
[dein] Text.TOML: No such file `/home/ec2-user/.vim/toml/dein.toml'.
Error detected while processing /home/ec2-user/.vimrc:
line   31:
E492: Not an editor command: enable syntax
Press ENTER or type command to continue

さすがにdein.tomlが無いとダメらしい…。という事で、dein.tomlを空で作成(「無い」と「空」の違いに注意)。

[ec2-user@ip-172-31-44-114 .vim]$ touch toml/dein.toml
[ec2-user@ip-172-31-44-114 .vim]$ ls toml
dein.toml

もう一回、vim ~/.vimrcでエラーが消えた事を確認。

slimv.vimを導入

ここまで何も言わずに引っ張ってきてしまいましたが、今回deinをインストールしたのはCommon Lisp向けVimプラグインslim.vimを導入しようと思った(指が短いためEmacsは苦手)からで、他のプラグインも今後入れる事があればよしなに管理したいと思ったからなのでした。
Vimmerな人たちのためのCommonLisp構築

上記ではdeinの設定は.vimrcで行われていますが、ここでは折角dein.tomlを作ったのでtomlに設定してみます。

~/.vim/toml/dein.html
  1 [[plugins]]
  2 repo = 'Shougo/dein.vim'
  3
  4 [[plugins]]
  5 repo = 'kovisoft/slimv'

ですが、やはりエラーが…

[ec2-user@ip-172-31-44-114 .vim]$ vi toml/dein.toml
[dein] Not installed plugins: ['slimv']
Error detected while processing /home/ec2-user/.vimrc:
line   35:
E492: Not an editor command:     dein#install()
Press ENTER or type command to continue

そこで、再び
Vimmerな人たちのためのCommonLisp構築
を見返してみると

Pythonのインストール

の項目が…

pythonは一応始めから入っているようなのですが、

[ec2-user@ip-172-31-44-114 ~]$ python -V
Python 2.7.14

Vimにはpython向けの機能が入っていない模様です。

:version
VIM - Vi IMproved 8.1 (2018 May 18, compiled Jul  7 2019 07:55:02)
Included patches: 1-1601
Compiled by ec2-user@ip-172-31-44-114.ap-northeast-1.compute.internal
Huge version without GUI.  Features included (+) or not (-):
+acl               -farsi             -mouse_sysmouse    -tag_any_white
+arabic            +file_in_path      +mouse_urxvt       -tcl
+autocmd           +find_in_path      +mouse_xterm       +termguicolors
+autochdir         +float             +multi_byte        +terminal
-autoservername    +folding           +multi_lang        +terminfo
-balloon_eval      -footer            -mzscheme          +termresponse
+balloon_eval_term +fork()            +netbeans_intg     +textobjects
-browse            +gettext           +num64             +textprop
++builtin_terms    -hangul_input      +packages          +timers
+byte_offset       +iconv             +path_extra        +title
+channel           +insert_expand     -perl              -toolbar
+cindent           +job               +persistent_undo   +user_commands
-clientserver      +jumplist          +postscript        +vartabs
-clipboard         +keymap            +printer           +vertsplit
+cmdline_compl     +lambda            +profile           +virtualedit
+cmdline_hist      +langmap           -python            +visual
+cmdline_info      +libcall           -python3           +visualextra
+comments          +linebreak         +quickfix          +viminfo

-python-python3となっています。
もしやこれが原因?

これはdeinのパッケージ管理の問題では無く、Vimのビルドパラメータの問題なので、Vimをもう一度ビルドしてやる必要がありそうです。

というより、今回、Vimをソースからビルドしているので、最初からこれを考慮に入れていれば一回の作業で済んだのですが、行き当たりばったりなので段取りが悪くてすみません…。

ついでなのでpython3を入れてみます。

sudo yum python3 install
[ec2-user@ip-172-31-44-114 ~]$ python3 -V
Python 3.7.3
[ec2-user@ip-172-31-44-114 ~]$ pip3 -V
pip 9.0.3 from /usr/lib/python3.7/site-packages (python 3.7)

python3のインストールが完了したので、

./configure --enable-python3interp > configure.log

するとconfigure.logに以下のメッセージが

checking if compile and link flags for Python 3 are sane... no: PYTHON3 DISA    BLED

エラーメッセージからググってみると、
vim初期インストール時の対応

原因1
python-devをインストールする必要がある
原因2
pythonのconfigフォルダを指定してあげる必要がある

まずは「原因1」の問題を解決してみます。

sudo yum install python3-devel

気を取り直してもう一度configureしてみます。

make distclean clean
./configure --enable-python3interp > configure.log
configure.log
 67 checking for python3... /usr/bin/python3
 68 checking Python version... 3.7
 69 checking Python is 3.0 or better... yep
 70 checking Python's abiflags... m
 71 checking Python's install prefix... /usr
 72 checking Python's execution prefix... /usr
 73 checking Python's configuration directory... /usr/lib64/python3.7/config-3.7    m-x86_64-linux-gnu
 74 checking Python3's dll name... libpython3.7m.so.1.0
 75 checking if -pthread should be used... yes
 76 checking if compile and link flags for Python 3 are sane... yes
 77 checking if -fPIE can be added for Python3... yes

今度はうまくいきました。

make
sudo make install
VIM - Vi IMproved 8.1 (2018 May 18, compiled Jul 16 2019 16:09:13)
Included patches: 1-1601
Compiled by ec2-user@ip-172-31-44-114.ap-northeast-1.compute.internal
Huge version without GUI.  Features included (+) or not (-):
+acl               -farsi             -mouse_sysmouse    -tag_any_white
+arabic            +file_in_path      +mouse_urxvt       -tcl
+autocmd           +find_in_path      +mouse_xterm       +termguicolors
+autochdir         +float             +multi_byte        +terminal
-autoservername    +folding           +multi_lang        +terminfo
-balloon_eval      -footer            -mzscheme          +termresponse
+balloon_eval_term +fork()            +netbeans_intg     +textobjects
-browse            +gettext           +num64             +textprop
++builtin_terms    -hangul_input      +packages          +timers
+byte_offset       +iconv             +path_extra        +title
+channel           +insert_expand     -perl              -toolbar
+cindent           +job               +persistent_undo   +user_commands
-clientserver      +jumplist          +postscript        +vartabs
-clipboard         +keymap            +printer           +vertsplit
+cmdline_compl     +lambda            +profile           +virtualedit
+cmdline_hist      +langmap           -python            +visual
+cmdline_info      +libcall           +python3           +visualextra
+comments          +linebreak         +quickfix          +viminfo

Vimを起動して:

:call dein#install()
[dein] Done: (2019/07/19 14:46:31)

どうやらdeinは正常にインストールされたようです。

次に、tomlの設定により、slimvがインストールが導入されている事を確認します。

slimvSample.PNG

Common Lispのソースプログラムにシンタックスハイライトが入りました。

vi vim コマンド

$
0
0

.bashrcのファイルを編集する機会があったので、

(↓がしたくて
https://qiita.com/lemtosh469/items/334ff76366e054a3a3aa)

vimコマンドの使い方で教えてもらった内容メモ
vimは慣れるまで少し時間がかかるとのこと。

はじめに

ターミナルで
$viでvimに入れる。
または
$vi ファイル名でファイルを指定して入れる。

★実践 「.bashrcのファイルを編集したい」★
$vi ~/.この状態でタブkey2回押すと、リストが表示される。
そこから補完していくのを推奨。
タイポ減らせる。

コマンドモード

便利キー
i入力モードへ(カーソルがある場所で)
o1行下に改行して入力モードへ
a1文字ずらして入力モードへ

入力モード

入力できる状態のこと
--INSERT--を表示されている時、入力モードです。

コピペで編集。

escでコマンドモードへ戻る

コマンドモード終了したい

:q保存せず終了
:w上書き保存のみ
:wq上書き保存して終了

おわり。

駆け出しVimmerの奮闘記

$
0
0

環境

  • MacOS Mojave versoin:10.14.5
  • Macbook Pro

前置き

最近Vimというエディタの存在を知り、習得したら効率よくコードかける!と思い、始めた。
よく分かってないが、とりあえずターミナルで
vim ファイル名
とすれば、勝手にVimで開いてくれた。ここでは、素のVimで自分が覚えたコマンド、覚えたいコマンドを一覧にしておこうと思う、そうつまり自分用ですね。
どんどん追加していく予定です

2019/7/20

  • モード
    • ノーマルモード escまたはCtrl+cでこのモードになる
    • インサートモード i,Shift+iでこのモード
    • ビジュアルモード v,Shift+v,Ctrl+vでこの...
    • コマンドモード :で...
  • ファイル
    • :wで保存
    • :qで終了
    • :q!で強制終了
    • :wqで保存して終了
  • 移動
    • ノーマルモード(Normal)でhjkl、順に左、下、上、右にカーソルを移動
    • Normalでwbeで単語間のジャンプ

etc...

ターミナルにブランチを表示する

$
0
0

$git branch -aをしなくても、ターミナルにブランチが表示されるようにしたい。
111.png

以下を.bashrcファイルに書き込みすればOK

source /usr/local/etc/bash_completion.d/git-prompt.sh
source /usr/local/etc/bash_completion.d/git-completion.bash
GIT_PS1_SHOWDIRTYSTATE=true
export PS1='\[\033[32m\]\u@\h\[\033[00m\]:\[\033[34m\]\w\[\033[31m\]$(__git_ps1)\[\033[00m\]\n\$ '

手順

.bashrcファイルの開き方

$code .bashrc

.bashrcに追加で記述

source /usr/local/etc/bash_completion.d/git-prompt.sh
source /usr/local/etc/bash_completion.d/git-completion.bash
GIT_PS1_SHOWDIRTYSTATE=true
export PS1='\[\033[32m\]\u@\h\[\033[00m\]:\[\033[34m\]\w\[\033[31m\]$(__git_ps1)\[\033[00m\]\n\$ '

.bashrcの内容を読み込み

$source .bashrc

完了!

参考
https://bottoms-programming.com/archives/terminal-branch-name.html
(下の記事では、$が改行されないバージョン)
https://qiita.com/lemtosh469/items/334ff76366e054a3a3aa

Viewing all 5729 articles
Browse latest View live


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