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

vimでコピペ

$
0
0

vimでコーディングしている時、webページからコピペすると
インデントがずれることありますよね?
そんな時毎回"="でインデント直すのはめんどうだなって思って、
ggったらあった
vim
:set paste

たったこれだけでいいらしい!
めっちゃ便利!
早速.vimrcに書いとかなきゃ!


ctrlp でオブジェクトファイルとかを無視する

$
0
0

ctrlp.vimで特定のファイルを無視する設定

.vimrc
letg:ctrlp_custom_ignore ='\v\.(o|d|out|log|bin|gcno|gcda)$'

viとvimの設定を分ける

$
0
0

CLI から起動する vi は素のまま使いたいって場合に。

-u NONE --noplugin とオプションつけて起動するとなにも読み込まれない。
これを zshrc とか bashrc にエイリアス登録しておけば、使い分けが簡単。

.zshrc
# vi は素のまま使うaliasvi="vi -u NONE --noplugin"# vim は MacVim として起動するif[-f/Applications/MacVim.app/Contents/MacOS/Vim];thenaliasvim='envLANG=ja_JP.UTF-8/Applications/MacVim.app/Contents/MacOS/Vim"$@"'fi

[NeoBundle] My First Neobundle

$
0
0

NeoBundle is ...

read this.

Install

$ mkdir-p~/.vim/bundle
$ git clone https://github.com/Shougo/neobundle.vim~/.vim/bundle/neobundle.vim

Setup

write configuration at ~/.vimrc for NeoBundle

"---------------------------" Neobundle Settings"---------------------------" set directory path to manage bundlesetruntimepath+=~/.vim/bundle/neobundle.vim/" Required:call neobundle#begin(expand('~/.vim/bundle/'))" manage neobundle by neobundle
NeoBundleFetch 'Shougo/neobundle.vim'" HERE!! WRITE PLUGINGS!!call neobundle#end()" Required:filetype plugin indent on" uninstallede plungins checker
NeoBundleCheck

"-------------------------" End: Neobundle Settings."-------------------------

reflect

$ source ~/.vimrc

Add plugins

" HERE!! WRITE PLUGINGS!!" NERDTree
NeoBundle 'scrooloose/nerdtree

call neobundle#end()
$ vim

Screen Shot 2015-03-26 at 19.06.22.png

type y, start installing

some other plugins

NeoBundle 'Townk/vim-autoclose'
NeoBundle 'mattn/emmet-vim'
NeoBundle 'thinca/vim-quickrun'
NeoBundle 'grep.vim'
NeoBundle 'scrooloose/syntastic'
$ vim
~/.vimrc
letg:syntastic_javascript_checker ="jshint"letg:syntastic_check_on_open =0"never check at opening fileletg:syntastic_check_on_save =1"check at saving file
$ source ~/.vimrc

[vim] タブや改行を表示する・元に戻す

$
0
0

メモとして。

setlist"setsetnolist"unset

Syntastic + Rubocop + Ruby2.1.2で上手く動かないので対処した

$
0
0

Ruby2.1.2で開発しているプロジェクトでSyntastic + Rubocopが上手く動かなかったので対処した。

Syntasticが構文解析に使っているgemのgithub.com/whitequark/parserはRubyのバージョンをチェックしていて、パッチレベルでの最新版以外では警告を出す。

$ rubocop -v
warning: parser/current is loading parser/ruby21, which recognizes
warning: 2.1.5-compliant syntax, but you are running 2.1.2.
0.29.1

警告が出るとSyntasticはRubocopをチェッカーから外してしまう。
ちなみに認識されているチェッカーは :SyntasticInfoを実行すると確認できる。

対処法1
Rubyのバージョンを上げる。
parserのv2.2.0.3ではRuby 2.1.xの場合2.1.5だけが警告を出さない。
ref: https://github.com/whitequark/parser/blob/72401442432cb7ae1909b1f980b1dab3c4cad422/lib/parser/current.rb#L31

対処法2
parserとRubocopのバージョンを下げる。
Ruby: 2.1.2
parser: 2.2.0.pre.5
Rubocop: 0.26.1

簡単なvimセットアップ

$
0
0

basic

下記のconfigファイルを~/.vimrcとして保存する
http://amix.dk/vim/vimrc.html

package manager

https://github.com/tpope/vim-pathogen

$ mkdir -p ~/.vim/autoload ~/.vim/bundle &&\
curl -LSso ~/.vim/autoload/pathogen.vim https://tpo.pe/pathogen.vim

~/.vimrcに下記の一行を追加する
execute pathogen#infect()

install nerdtree

https://github.com/scrooloose/nerdtree

cd ~/.vim/bundle
git clone https://github.com/scrooloose/nerdtree.git

install minibufexpl.vim

https://github.com/fholgado/minibufexpl.vim.git

cd ~/.vim/bundle
git clone https://github.com/fholgado/minibufexpl.vim.git

install ctrlp.vim

https://github.com/kien/ctrlp.vim

cd ~/.vim/bundle
git clone https://github.com/kien/ctrlp.vim

RaspberryPiにPythonとVimとGitをインストールするのに使ったスクリプト

$
0
0

SDカードっていきなり読めなくなるから怖い。

# python
sudo apt-get -y install git libreadline-dev libbz2-dev libsqlite3-dev libssl-dev
git clone https://github.com/yyuu/pyenv.git ~/.pyenv
git clone https://github.com/yyuu/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv
git clone https://github.com/s1341/pyenv-alias.git ~/.pyenv/plugins/pyenv-alias

echo'export PYENV_ROOT="${HOME}/.pyenv"'>> ~/.bashrc
echo'if [ -d "${PYENV_ROOT}" ]; then'>> ~/.bashrc
echo'    export PATH=${PYENV_ROOT}/bin:$PATH'>> ~/.bashrc
echo'    eval "$(pyenv init -)"'>> ~/.bashrc
echo'fi'>> ~/.bashrc
exec$SHELL -l

export PY2V=2.7.9
export PY3V=3.4.3

pyenv install ${PY2V}
pyenv rehash
VERSION_ALIAS="${PY2V}.so"PYTHON_CONFIGURE_OPTS="--enable-shared" pyenv install ${PY2V}
pyenv rehash
pyenv install ${PY3V}
pyenv rehash
VERSION_ALIAS="${PY3V}.so"PYTHON_CONFIGURE_OPTS="--enable-shared" pyenv install ${PY3V}
pyenv rehash

# luajit
curl -O http://luajit.org/download/LuaJIT-2.0.3.tar.gz
tar zxf ./LuaJIT-2.0.3.tar.gz
pushd ./LuaJIT-2.0.3
make
sudo make install
popd# vim
sudo apt-get -y build-dep vim
pyenv global ${PY2V}.so ${PY3V}.so
pyenv rehash

hg clone https://vim.googlecode.com/hg/ vim
pushd ./vim
hg update v7-4-664

find ./ -name config.cache -delete
LDFLAGS="-Wl,-rpath=${HOME}/.pyenv/versions/${PY2V}.so/lib:${HOME}/.pyenv/versions/${PY3V}.so/lib:/usr/local/lib"\
./configure \
--enable-fail-if-missing \
--with-features=huge \
--disable-darwin \
--disable-selinux \
--enable-multibyte \
--enable-fontset \
--enable-perlinterp \
--enable-pythoninterp=dynamic \
--enable-python3interp=dynamic \
--enable-tclinterp \
--enable-rubyinterp \
--enable-luainterp=yes \
--with-lua-prefix=/usr/local \
--with-luajit

make
sudo make install
popd
pyenv global ${PY2V}${PY3V}
pyenv rehash

unset PY2V
unset PY3V

# git
sudo apt-get install libcurl4-openssl-dev
git clone https://github.com/git/git.git
pushd ./git
git checkout refs/tags/v2.3.3
make
make install
popd

ほとんどはその辺に転がっているスクリプトなので補足しない。
pyenv-aliaspyenvでのインストール時に別名を与えるマイナーなプラグイン。
普通にpyenvでpythonをインストールすると、同じバージョンでstaticとsharedを共存させられないが、pyenv-aliasを使うと可能になる。
sharedはvim用。


魔法使いへの道:3歩目

$
0
0

この記事も初心者スクリプタが魔法使いを目指すためにHow to become a Hackerに書かれている項目を忠実に実行していくための日記です。

vimとgitを突っ込む

テキストエディタはvimが好きです。
vimはそのままでもよく練られたキーボード操作が可能になっていますがプラグインを入れるともっと化けると感じています。
なので早速インストールします!
sudo yum install -y git vim
gitはプラグインを入れるときに使う便利パッケージを入れるのに使います。

インストールは完了です!
それでは早速vimのプラグインを入れていきましょう!

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

プラグインを入れるためにまずはプラグインを入れておくディレクトリを作成する必要があるとかないとか

mkdir -p ~.vim/bundle

さっそくこれで作成します。

で、次にgitから
git clone https://github.com/Shougo/neobundle.vim ~/.vim/bundle/neobundle.vim
でプラグイン管理するためのパッケージをインストールしていきます。

あとはカレントディレクトリに".vimrc"ファイルを作成すればOK!

php書くときに知っといた方が捗るvimの使い方かも

$
0
0

phpのエディタ選ぶのにvimだとどうするのか聞かれたのでメモを残す。

  • 基本的な使い方はググれば載ってるので書いてないです。
  • mac専用のpluginも書いてるかも。
  • vimの使い方って書いたけどただのpluginの紹介かも。。。

コードフォーマット

フォーマットをかけたい範囲を選択して=を押下。

ファイル全体に適用したいならggVG=でOK

タグジャンプ

メソッド名等から定義先へジャンプしたい場合はvimだけだとgrep使うしかないのでctgasとかgtagsを使う。

macの場合はbrewでinstallできる。

brew install ctags

tagを作成する

ctags -R

これだけでタグジャンプが使える。

phpの場合

ctags -R --regex-php="/^[ \t]*const[ \t]+([a-z0-9_]+)/\1/d/i"

phpの場合は上記のようにするとconstとかもジャンプできる。

タグジャンプの仕方

  • ジャンプしたい単語にカーソルを合わせてctrl + }でジャンプ。
  • 戻りたい場合はctrl + oで戻れる

メソッドがどこで使われているか

grepでもできるんだけど今回はGNU GLOBAL(gtags)を使ったやり方を書きます。
* 対象の言語が対応しているかチェックしてください。
http://www.gnu.org/software/global/global.html
http://uguisu.skr.jp/Windows/gtags.html

何ができるかは上記のサイト読んでください。
いつの間にか色んな言語が追加できるようになってるみたいですね。
この記事書いてから気づいた。。。

gtagsについては後で全部書き換えるかも知れないので以下のサイトを先に読んでください。

参考:http://qiita.com/sona-tar/items/672df1259a76f082ce42

↑後でやってみます。

macの場合はbrewでinstallできる?

brew search であったから多分できる。試してはない。

brew search global

tagを作成する

gtags -v

vim用のplugin導入

NeoBundle 'vim-scripts/gtags.vim'

使い方は以下のサイトが良い感じだった
http://blog.matsumoto-r.jp/?p=2369

使い方というか私のvimrcの設定を貼ります。

" gtags
" 検索結果Windowを閉じる
nnoremap <C-q> <C-w><C-w><C-w>q
" Grep 準備
nnoremap <C-g> :Gtags -g
" このファイルの関数一覧
nnoremap <C-l> :Gtags -f %<CR><CR>
" カーソル以下の定義元を探す
"nnoremap <C-j> :Gtags <C-r><C-w><CR><CR>
map <C-j> :GtagsCursor<CR><CR>
" カーソル以下の使用箇所を探す
nnoremap <C-k> :Gtags -r <C-r><C-w><CR><CR>
" 次の検索結果
nnoremap <C-n> :cn<CR>
" 前の検索結果
nnoremap <C-p> :cp<CR>

上記の設定ができていれば単語にカーソルを合わせてctrl + kで利用箇所の一覧が出てきます。

強力な置換機能

リファクタリング等で使う場合はthinca/vim-qfreplaceというプラグイン入れると便利です。

先ほどの利用箇所の一覧がquickfix のウィンドウにある状態で:Qfreplaceと打ち込むと新しい画面(バッファ)が出てきます。ここで好きな置換等で書き換えてwqで抜けると変更した箇所が反映されます。
メソッド名の置換、引数の変更等が捗りますね。

参考:http://blog.supermomonga.com/articles/vim/qfreplace-benri.html

ちなみに当然、ctagsとgtagsの両方を使う必要はないです。
私はphp以外の言語用に両方はいってるから紹介しただけなので使いやすいものを選べば良いと思います。

ファイル同士のdiff

vimdiff a.txt b.txt

詳細は以下で
参考:http://nanasi.jp/articles/howto/diff/merge_diff.html

ちょっとターミナルの作業をしたい

:shell

上記でターミナルに制御が移ります。

exit

上記で抜けるとvimに戻ってきます。

置換

ファイル全体でhogeをfugaに置換する。

:%s/hoge/fuga/g

置換場所を確認しながら実行する場合はcをつける。

:%s/hoge/fuga/gc

hitした箇所で以下のように聞かれるので置換するならyしないで次いくならnになります。

replace with hoge (y/n/a/q/l/^E/^Y)?

参考:https://github.com/osyo-manga/vim-over

上記のpluginを入れるとビジュアル的にできるようです。

SublimeTextみたいな複数カーソル

NeoBundle 'terryma/vim-multiple-cursors'

:NeoBundleInstall

参考:http://qiita.com/sachin21/items/cfcb81bf4d1073429b68

上記に画像付きで説明があります。

コーディング規約のチェック

NeoBundle 'git://github.com/scrooloose/syntastic.git'

:NeoBundleInstall

設定は以下を参照すると良い。
参考:http://yuzuemon.hatenablog.com/entry/2014/08/13/135412

他にもたくさんある

書ききれないので私がphpで使ってるpluginを列挙だけしときます。
railsやjavascriptとかも含むともっとある。。。 

" テキストオブジェクト拡張
NeoBundle 'git://github.com/tpope/vim-surround.git'
"入力補完機能
NeoBundle 'git://github.com/Shougo/neocomplcache.git'
"vim 用の統合ユーザインターフェース
NeoBundle 'git://github.com/Shougo/unite.vim.git'
" 非同期処理
NeoBundle 'git://github.com/Shougo/vimproc.git'
" 整形
NeoBundle 'git://github.com/tsaleh/vim-align.git'
" プログラム実行
NeoBundle 'git://github.com/thinca/vim-quickrun.git'
" SQLの整形
NeoBundle 'git://github.com/vim-scripts/SQLUtilities.git'
" ファイラー
NeoBundle 'Shougo/vimfiler'
" indentの見える化
NeoBundle 'nathanaelkane/vim-indent-guides'
" デバック
NeoBundle 'joonty/vdebug'
" git連携
NeoBundle 'git://github.com/tpope/vim-fugitive.git'
" スニペット
NeoBundle 'Shougo/neosnippet'
” スニペット集
NeoBundle 'Shougo/neosnippet-snippets'
” スニペット集
NeoBundle 'git://github.com/honza/snipmate-snippets.git'
" 見出し一覧
NeoBundle "Shougo/unite-outline"
" git の変更点見える化
NeoBundle 'airblade/vim-gitgutter'
" クリップボード連携
NeoBundle 'airblade/vim-gitgutter'
" html サポート
NeoBundle 'mattn/emmet-vim'
" Dash連携
NeoBundle 'rizzatti/dash.vim'

:wq!

EC2 Amazon Linux を立ち上げた時にする初期設定

$
0
0

個人的に良く設定する事を忘れないようにメモします。

yumアップデート

$ sudo yum update -y

vimの設定をする

プラグイン管理ツールNeobundleをインストール

$ mkdir -p ~/.vim/bundle
$ yum -y install git
$ git clone git://github.com/Shougo/neobundle.vim ~/.vim/bundle/neobundle.vim

.vimrcの記述

コピペする時:set pasteすると自動インデントとかしないから嬉しい

.vimrc
" 最初に記述しておいたほうが良いもの============
" 文字コードの指定
scriptencoding utf-8

" ミュートにする。
set t_vb=
set visualbell
set noerrorbells

" プラグイン管理 NeoBundle ==============================================

" ファイルタイプの自動検出をしないようになる。
" neobundleなどのプラグインを読み込むときは一度filetypeをoffにしておく必要がある
filetype off

if has('vim_starting')
      set runtimepath+=~/.vim/bundle/neobundle.vim/
endif

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

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

" Recommended to install
" After install, turn shell ~/.vim/bundle/vimproc, (n,g)make -f
" your_machines_makefile

" ここから使いたいプラグインを書く =========================

" Dirのtree表示
NeoBundle 'scrooloose/nerdtree'
" ソースをVim上で実行
NeoBundle 'thinca/vim-quickrun'
" Markdown記法をHTMLに変換
NeoBundle 'Markdown'
" クオートや括弧の対を自動入力
NeoBundle 'Townk/vim-autoclose'
" シンタックスチェックをする
NeoBundle 'scrooloose/syntastic'

" ファイルタイプの自動検出、ファイルタイプ用の プラグインとインデント設定を自動読み込みするようになる。
filetype plugin indent on

" Installation check.
NeoBundleCheck

" シンタックスチェック scrooloose/syntasticの設定============================

let g:syntastic_check_on_open = 0
let g:syntastic_enable_signs = 1
let g:syntastic_echo_current_error = 1
let g:syntastic_auto_loc_list = 1
let g:syntastic_enable_highlighting = 1
let g:syntastic_php_checkers = ['php', 'phpcs', 'phpmd']
" なんでか分からないけど php コマンドのオプションを上書かないと動かなかった
let g:syntastic_php_php_args = '-l'
set statusline+=%#warningmsg#
set statusline+=%{SyntasticStatuslineFlag()}
set statusline+=%*

" 自分のセッティング===========================================================

" ハイライト
syntax on

" スワップファイルはいらない
set noswapfile
" バックアップファイルもいらない
set nobackup

" タブ文字を半角スペースが挿入" 
set expandtab

" 対応する括弧やブレースを表示する
set showmatch

" 行を超えてもバックスペースキーによる編集が可能
set backspace=2

" 行番号表示
set number

" ステータス行に表示させる情報の指定
set statusline=%<%f\ %m%r%h%w%{'['.(&fenc!=''?&fenc:&enc).']['.&ff.']'}%=%l,%c%V%8P

" ショートカットキー マッピング ====================================================

" プラグインコマンドショートカット
map ,n <ESC>:NERDTreeToggle<CR>
map ,r <ESC>::QuickRun<CR>
map ,m <ESC>::QuickRun markdown<CR>

" 開いているPHPファイルを自動整形する
map ,f <ESC>:! php-cs-fixer fix %<CR>

" 貼り付け用
map ,a <ESC>::set paste<CR>

" Ctrl-jにESCの役割を担ってもらう。
imap <c-j> <esc>

" for php
map ,p <ESC>:!php -l %<CR>

" for perl
map ,t <ESC>:%! perltidy -q -pbp<CR>
map ,w <ESC>:!perl -wc %<CR>

" 全角スペースの表示================================================================

function! ZenkakuSpace()
    highlight ZenkakuSpace cterm=underline ctermfg=lightblue guibg=darkgray
endfunction

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

" インデント Indent ==============================================================

set autoindent   " 自動でインデント
"set paste        " ペースト時にautoindentを無効に(onにするとautocomplpop.vimが動かない)
set smartindent  " 新しい行を開始したときに、新しい行のインデントを現在行と同じ量にする。
set cindent      " Cプログラムファイルの自動インデントを始める

" softtabstopはTabキー押し下げ時の挿入される空白の量,0の場合はtabstopと同じ,BSにも影響する
set tabstop=2 shiftwidth=2 softtabstop=0

" 連続インデント
vnoremap < <gv
vnoremap > >gv

if has("autocmd")
  "ファイルタイプの検索を有効にする
  filetype plugin on
  "そのファイルタイプにあわせたインデントを利用する
  filetype indent on
  " これらのftではインデントを無効に
  "autocmd FileType php filetype indent off

  autocmd FileType apache     setlocal sw=4 sts=4 ts=4 et
  autocmd FileType aspvbs     setlocal sw=4 sts=4 ts=4 et
  autocmd FileType c          setlocal sw=4 sts=4 ts=4 et
  autocmd FileType cpp        setlocal sw=4 sts=4 ts=4 et
  autocmd FileType cs         setlocal sw=4 sts=4 ts=4 et
  autocmd FileType css        setlocal sw=2 sts=2 ts=2 et
  autocmd FileType diff       setlocal sw=4 sts=4 ts=4 et
  autocmd FileType eruby      setlocal sw=4 sts=4 ts=4 et
  autocmd FileType html       setlocal sw=2 sts=2 ts=2 et
  autocmd FileType java       setlocal sw=4 sts=4 ts=4 et
  autocmd FileType javascript setlocal sw=2 sts=2 ts=2 et
  autocmd FileType perl       setlocal sw=4 sts=4 ts=4 et
  autocmd FileType php        setlocal sw=4 sts=4 ts=4 et
  autocmd FileType python     setlocal sw=4 sts=4 ts=4 et
  autocmd FileType ruby       setlocal sw=2 sts=2 ts=2 et
  autocmd FileType haml       setlocal sw=2 sts=2 ts=2 et
  autocmd FileType sh         setlocal sw=4 sts=4 ts=4 et
  autocmd FileType sql        setlocal sw=4 sts=4 ts=4 et
  autocmd FileType vb         setlocal sw=4 sts=4 ts=4 et
  autocmd FileType vim        setlocal sw=2 sts=2 ts=2 et
  autocmd FileType wsh        setlocal sw=4 sts=4 ts=4 et
  autocmd FileType xhtml      setlocal sw=4 sts=4 ts=4 et
  autocmd FileType xml        setlocal sw=4 sts=4 ts=4 et
  autocmd FileType yaml       setlocal sw=2 sts=2 ts=2 et
  autocmd FileType zsh        setlocal sw=4 sts=4 ts=4 et
  autocmd FileType scala      setlocal sw=2 sts=2 ts=2 et
endif

screenの設定をする

.screenrc
escape ^Tt
shelltitle "$ |bash" 
hardstatus alwayslastline "[%c]%`%-w%{=b bw}%n %t%{-}%+w" 
bind s
startup_message off
autodetach on
defscrollback 1024

screen
screen
screen
screen
screen

grepより超早い検索ツールThe Silver Searcher

# rpm -ivh http://swiftsignal.com/packages/centos/6/x86_64/the-silver-searcher-0.13.1-1.el6.x86_64.rpm

ログ解析にmultitail

# yum -y install multitail
# cd /var/log/httpd
# multitail -f access_log -f error_log

障害調査時に使うコマンドをインストール

# yum -y install dstat sysstat

日本時間(JST)にする

yum update してもUTCに戻らないやり方

# vim /etc/sysconfig/clock

ZONE="Asia/Tokyo" 
UTC=false

# cp /usr/share/zoneinfo/Japan /etc/localtime
# date
Thu Sep  4 10:37:21 JST 2014

※再起動
# /etc/init.d/crond restart

swap追加

# free
# dd if=/dev/zero of=/mnt/swapfile bs=1M count=1280
# mkswap /mnt/swapfile
# swapon /mnt/swapfile
# chmod 0644 /mnt/swapfile
# free
# sudo vim /etc/fstab
これを追記
/mnt/swapfile  swap     swap    defaults        0   0

日本語環境にする

# echo "LANG=ja_JP.UTF-8" > /etc/sysconfig/i18n
# yum install -y man-pages-ja

個人のユーザを作る

頻繁に作るかもなので、以下のシェルスクリプトを作っておく。
引数にユーザ名入れよう。
自動でwheelにもいれる
標準出力された鍵は忘れずにコピーして保存

useradd.sh
#!/bin/bashif[$# -ne 1];thenecho"指定された引数は$#個です。" 1>&2
  exit 1
fi

cat <<__EOT__ユーザ名 $1 ユーザを作ります。__EOT__user=$1
useradd $user -G wheel
passwd $user
mkdir /home/$user/.ssh
cd /home/$user/.ssh
ssh-keygen -t rsa
mv /root/.ssh/id_rsa.pub /home/$user/.ssh/authorized_keys
mv /root/.ssh/id_rsa /home/$user/.ssh/${user}_rsa
chmod 600 /home/$user/.ssh/authorized_keys
chmod 700 /home/$user/.ssh
chown -R $user:$user /home/$user/.ssh
cat /home/$user/.ssh/${user}_rsa

権限変更してrootで実行する

# chmod 700 useradd.sh
# ./useradd.sh hoge

sudoしたいならvisudoでwheelを有効にする。

# visudo

%wheel  ALL=(ALL)   ALL

ec2-userにパスワードを設定する

初期のec2-userにはパスワードが無いので設定しておく

# passwd ec2-user
New password: 任意の文字列
Retype new password: 任意の文字列

# visudo -f /etc/sudoers.d/cloud-init

NOPASSWDを消して、以下に変更する。
ec2-user ALL=(ALL) ALL

# User rules for ec2-user
ec2-user ALL=(ALL) ALL

TypeScript 1.5のTSServerでPluginつくった

$
0
0

祝! 1.5.0-alpha

TypeScript 1.5.0-alphaがリリースされましたね!

TypeScriptの1.5では, ES6対応や, Annotation(Decorator)等の言語の対応だけでなく, TSServerというエディタ向けツールが含まれています.
TSServerは, コンパイルやリファクタリングなど、エディタに必要な機能を提供するServerです. 標準入出力を介して, エディタに様々な情報を提供してくれる優れものです.
MicroSoftが提供しているSublime TextのPluginも, このTSServerを使って実装されています.

TSServerとVim plguin

とはいえ、僕はVim使い。残念なことに, MicroSoftはVim向けのPluginまでは作ってくれませんでした.
ということで, TSServerを利用したVim plugin tsuquyomiを作りました.

capt_comp.png

tsuquyomiは現状で、下記をサポートしています:

  • 補完(omni-complete)
  • Class, Method, Property等の定義箇所へジャンプ
  • Class, Method, Property等を参照している箇所へのジャンプ
  • コンパイルエラー箇所のQuickfix表示
  • etc...

Install

TypeScriptを最新化します:

npm -g install typescript

tsuquyomiはShougo/vimproc.vimを利用します. 事前にInstallしておいてください。
(Windows版であれば, kaoriyaのgvimには最初からvimprocがバンドルされています)

Vim のplugin管理にNeoBundleを使っているのであれば, .vimrcに下記を追記して, :NeoBundleInstallを実行すると, vimproc, tsuquyomiの双方がinstallされます.

.vimrc
NeoBundle 'Shougo/vimproc'
NeoBundle 'Quramy/tsuquyomi'

vimprocは下記でruntimeをbuildしてください(https://github.com/Shougo/vimproc.vim#installも参照の事):

cd ~/.vim/bundle/vimproc
make

補完

FileTypeがtypescriptであれば、omni補完が有効化されます. <Ctrl-x><Ctrl-o>を補完したい箇所でタイプしてください.

定義箇所へのジャンプ

<Ctrl-]>を任意のSymbol上でタイプすると, そのSymbolが定義されている箇所へジャンプします. 定義が別ファイルの場合, windowをsplitして定義箇所を表示します.
(ちなみに, /// <reference path="..." />とかでタイプすると, .d.tsファイルを開くことができます)

参照箇所の表示

<Ctrl-^>を任意のSymbol上でタイプすると, そのSymbolを参照している箇所の一覧をlocation listで表示します.
(但し, 参照箇所として認識するのは, 現在Vimで開いているバッファに限定されます.)

Quickfix

バッファの保存時, コンパイルエラーとなっている箇所をQuickfixウィンドウに表示します.

リファクタリング

SymbolのRename機能を提供します.

デフォルトではkey mapしていませんが, <Plug><TsuquyomiRenameSymbol>をmapすれば呼び出せるようになります.

例えば, 下記は「,e」をマップする例です.

.vimrc
let mapleader =","noremap \ ,
augroup typescript_key_mapping
  autocmdFileType typescript nmap <buffer><Leader>e<Plug>(TsuquyomiRenameSymbol)
augroup END

その他

tsuquyomiには他にも幾つか機能があります. 詳細は, READMEか, help docを見てください.
今後, outline(unite-outlineと連動させたい)等を追加していく予定です.

tsuquyomiを作成する上で, TSServerの利用方法も大体身についたので, 機会があればまとめて記載します(あんまり需要無い気もするけど...).

vimで-(ハイフン)を単語に含める方法

$
0
0

概要

aaa-bbbviwなどをする場合、aaa-bbbを選択したいですが、デフォルトではaaaだけが選択されます。

方法

:set isk+=-

.vimrcに設定します。

すると-も単語に含まれるようになり、aaa-bbbが選択できます。

Vim Powerline用のFont Patchをあてる

$
0
0

Powerlineに関する情報、Font Patchに関する情報はたくさんあったのだが、微妙に自分の環境と異なるところがあったり、細かいところで結構時間を取られたのでメモを残しておく。
Font Patchをあてないと、矢印とかのNon ASCIIな文字が化けてしまう。参照

環境

  • Mac OS X Yosemite
  • iTerm2
  • Ricty

Rictyを用意する

  • 手順
  • 生成物として、Ricty-Regular.ttfがあればよい
    • 必要ならRicty-Bold.ttfも。

powerline-fontpatcherを用意する

  • % git clone https://github.com/Lokaltog/powerline-fontpatcher

powerline-fontpatcherを使って、RictyにPatchをあてる

  • % fontforge -lang=py -script ./powerline-fontpatcher/scripts/powerline-fontpatcher Ricty-Regular.ttf
  • 成功するとRicty Regular for Powerline.ttfというファイルが生成される
  • 生成されたFontをインストールする
    • Macなら生成されたディレクトリでopen .して、ダブルクリックすればよし。

iTerm2の設定

  • Preference -> Profiles -> Textで、Non-ASCII FontにインストールしたFontを設定する

vimrcファイルの設定

let g:Powerline_symbols = 'fancy'
set laststatus=2

つまづいたところ

fonrforgeを実行したときにlibへのパスがなくてエラーになる

dyld:Library not loaded: /usr/local/lib/libjpeg.8.dylib

解決方法

sudo ln -s /usr/local/Cellar/jpeg/8d/lib/libjpeg.8.dylib /usr/local/lib/

[Vim as IDE 第1回] NeoBundleを利用してvimプラグインを一元管理する

$
0
0

この記事は、vimをIDEとして利用するための方法を記述していく連載、Vim as IDEの第1回です。この回では、vimで多くのプラグインを管理する場合に必須とも言えるパッケージマネージャー、NeoBundleについて解説します。

NeoBundleとは何か

Neobundleは暗黒美夢王たるShougoさんによって作られた、vimプラグインのパッケージマネージャーです。Neobundleを導入することにより、下記の様なメリットを享受することが出来ます。

  • .vimrcに一行追記するだけで各種有益vimプラグインを導入することができるようになる。
  • :NeoBundleUpdateコマンドを実行するだけで全プラグインを最新版にアップデートすることができる。
  • 後述するNeoBundleLazyを利用することにより、起動時に必要なプラグインのみを読み込ませることで多数のプラグインを利用する場合でも起動を高速化できる。

というわけで、多数のvimプラグインを導入する場合はマストで入れておきたいプラグインです!

NeoBundleのインストール

NeoBundleは下記の手順で導入することが出来ます。

  1. プラグイン管理用のbundleディレクトリを作成
  2. 作成したディレクトリに、gitからNeobundleをチェックアウト

具体的には、下記のコマンドで導入出来ます。お手軽ですね。

sh
$ mkdir -p ~/.vim/bundle
$ git clone git://github.com/Shougo/neobundle.vim ~/.vim/bundle/neobundle.vim

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

NeoBundleの導入が完了したら、:NeoBundleInstallコマンドによるプラグインのインストールが可能になります。

例えば、vim上でファイルを閲覧するためのプラグインvimfilerをインストールする場合、まず下記を.vimrcに追記しvimを再起動します。

.vimrc
if has('vim_starting')   " 初回起動時のみruntimepathにneobundleのパスを指定するsetruntimepath+=~/.vim/bundle/neobundle.vim/endif" NeoBundleを初期化call neobundle#begin(expand('~/.vim/bundle/'))" インストールするプラグインをここに記述
NeoBundle 'Shougo/vimfiler'call neobundle#end()" ファイルタイプ別のプラグイン/インデントを有効にするfiletype plugin indent on

neobundle#beginはNeobundleを初期化するための関数です。引数には、先ほど作成したbundle管理用のディレクトリを指定します。「~/.vim/bundle/」以外のパスでプラグインを管理したいという場合は適宜変更してください。「~/.vim/bundle/」でプラグインを管理する場合は、引数のデフォルト値も同様の値となってるので、引数を省略してneobundle#begin()と書くことも出来ます。

また、NeoBundleの後に続いて書かれているパスはgithub上でのリポジトリの場所です。ここではよく"Shougo"という文字が現れますが、これはプレフィックスとして必要な文字というわけではなく、単にShougoさんが有益プラグインを大量に作ってくれているためです。感謝しましょう。

「filetype plugin indent on」は、Ruby/PHPなどのファイルタイプを検出しファイルタイプ別のプラグインやインデントを有効にする処理です。この位置まではプラグインのロードが完了していないので、このタイミングで記述します。

次に、ノーマルモード時に: NeoBundleInstallコマンドを入力することで、先ほど作った~/.vim/bundleディレクトリ内にunite.vimがダウンロードされ、読み込まれます。

.vimrc
:NeoBundleInstall

無事インストールが完了すれば、:VimFilerコマンドを入力することでファイラーが起動するはずです。

プラグインのアップデートを行う

:NeoBundleUpdateコマンドを実行することにより、最新版があるプラグインはアップデートを実施することが出来ます。また、下記のように記述することで特定のプラグインのみをアップデートすることも可能です。インストールの指定時と違って、リポジトリのパスではなくプラグイン名のみを指定していることに注意してください。Shougo/vimfilerではなくvimfilerだけでOKです。

.vimrc
:NeoBundleUpdate vimfiler

プラグインの削除を行う

.vimrcからNeoBundle XXXの記述を消し、NeoBundleCleanコマンドを実行することでプラグインの削除を行うことが出来ます。こちらも、引数にプラグイン名を指定することにより特定のプラグインのみ削除することが可能です。先ほどインストールしたVimfilerを削除する場合は、.vimrcからNeoBundle 'Shougo/vimfiler'を削除し、下記のコマンドを実行します。

.vimrc
:NeoBundleClean vimfiler

vim起動時に未インストールプラグインを自動でインストールする

NeoBundleCheckコマンドを.vimrcに記述しておけば、わざわNeoBundleInstallコマンドを叩かなくともvim起動時に未インストールプラグインがあった場合は対話的にインストールしてくれます。

.vimrc
call neobundle#end()" NeoBundleCheck を走らせ起動時に未インストールプラグインをインストールする
NeoBundleCheck
" ファイルタイプ別のプラグイン/インデントを有効にするfiletype plugin indent on

NeoBunlde自体のリポジトリをNeoBundleで管理する

通常、NeoBundleで読み込んだプラグイン達へのパスはruntimepath(読み込むべきプラグイン達のパスを格納した変数)に追加されます。しかし、vimプラグインでないリポジトリをNeoBundleを利用して管理したいという場合もあります。

このようなケースでは、NeoBundleFetchコマンドを利用することにより、runtimepathにパスを追加することなく対象リポジトリをNeoBundleで管理することが出来ます。また、このNeoBundleFetchはNeoBundle自身をNeoBundleで管理するためにも使うことが出来ます。例えば、下記のように記述することでNeoBundle自体の最新版が配布されたとき、:NeoBundleUpdateで更新することができるようになります。

.vimrc
" NeoBundleを初期化call neobundle#begin(expand('~/.vim/bundle/'))" NeoBundleをNeoBundle自体で管理する
NeoBundleFetch 'Shougo/neobundle.vim'

アンチパターンとして、下記の様に他のリポジトリと同じ形で記述するとうまく動作しない場合があるので気をつけてください。

.vimrc
" !!!注意!!! うまく動作しない場合がある記述法
NeoBundle 'Shougo/neobundle.vim'

[ref] http://d.hatena.ne.jp/osyo-manga/20140512/1399901014

NeoBundleLazyでプラグインを遅延ロードする

NeoBundleは非常に便利で強力なプラグイン管理機構ですが、それがゆえに調子に乗ってプラグインを入れすぎて、vimの起動が遅くなってしまうという悲しい状況もあり得ます。そこで、特定の状況になるまでプラグインのロードを遅延させることができるのが、NeoBundleLazyです。基本的には、NeoBundleをNeoBundleLazyに置き換え、下記のように記述することで特定の状況になるまでロードを遅延させることが可能になります。

.vimrc
NeoBundleLazy 'Shougo/vimfiler', {
\   'autoload' : { 'commands' : [ 'VimFiler' ] },
\ }

上記の例では、VimFilerというプラグインを、:VimFilerコマンドを叩いて起動させるまでは読み込みを行わない、という指定になります。このように、普段は使わないプラグイン、特定の状況のみ利用するプラグインを遅延ロードさせることで、大量のプラグインを管理していてもvimの起動を高速化することが可能になります。

例えば、rubyを書くときのみvim-rubyというプラグインを利用したい、というケースでは下記のように記述することで遅延ロードさせることが出来ます。

.vimrc
" rubyでのみvim-rubyを読み込む
NeoBundleLazy 'vim-ruby/vim-ruby',{
\    "autoload" : {"filetypes" : ["ruby"]}
\}

NeoBundleについての解説はここまでです。さらに知りたい場合は、公式のリポジトリの解説やIssuesを見るのが良いでしょう。
https://github.com/Shougo/neobundle.vim

連載第2回では、vim 用の統合ユーザインターフェースunite.vimについての記事を書く予定です。


[Vim as IDE 第0回] VimをIDEとして使うために

$
0
0

はじめに

学生時代、初めてコードを書き始めてからこれまでずっとvimを利用して来て、いろいろな知見も溜まって来ました。その中で、様々な機能やプラグインを利用することにより、カスタマイズしたvimは完全ではなくともある程度はIDEに近い機能を搭載することができるんじゃないかと感じています。

そこで、この知見を自分のためにも一度まとめておこうと思い、vimについて不定期にまとめを書いてみることにしました。もう知ってるよって話も多いかもしれませんが、さらにこんな便利なものがある、とかこういうやり方の方がスマートだ、という話があれば指摘頂ければ嬉しいです。

また、最近ではAtomやRubyMine、PhpStormなどのIDEが主流になりつつあるし、それらが非常に便利だということも理解してるのですが、それでもあえてvimを使いたいという奇特な若者のために、有益な情報を提供できれば幸いです。

IDEとは何か?

まず、IDEとは何でしょう。IT用語辞典にわかりやすい説明があったので、見てみましょう。

プログラムのソースコードを記述するためのテキストエディタを中心に、ライブラリや開発中のクラスなどの仕様や内部構造を表示する機能、ソースコードから実行可能ファイルを構築(ビルド)するための機能や、コードとともにデータやドキュメントなどを一括して管理するプロジェクト管理機能、ファイルの新旧の版管理や複数人による編集を管理するバージョン管理機能、ステップ実行やインスペクションなどテストやデバッグを支援する機能などを持っていることが多い。プラグインなどの拡張機構を用いて、後から対応言語や機能を増やすことができるものもある。

エディタは一般的なテキストエディタとして機能に加え、入力途中の文字列から予約語や関数名、プロパティ名、メソッド名などの候補を推測して自動的に提示してくれるコード補完機能や、予約後や区切り文字などを認識して色分けして見やすくする機能、コンパイルエラーなどが発生した場所をエラーメッセージ等とともに強調表示する機能など、コード記述に特化した便利な機能が盛り込まれていることが多い。

IT用語辞典 e-Warodsより
http://e-words.jp/w/IDE-2.html

rubyやPHPの場合、そもそもビルドやコンパイルは必要ないのでスキップするとして、それ意外についてはvimで実現可能なものが多いです。つまり、vimはIDEであるということがわかります(強引)。

LL言語以外はvimで書かないのかってツッコミもあるとは思いますが、経験上例えばObjective-cとかはさすがにXcodeで書いた方が良いと思います。ひとまずこの連載では、LL言語、特にrubyを書くときにvimをIDE(っぽいもの)として利用する、というケースを想定して記事を書いていこうと思ってます。

今後記述予定の内容

この連載では、vimで下記の様な機能を利用できるようにし、vimをIDE(っぽいもの)として使うための方法を順に記述して行きます。

  • [第1回] NeoBundleを利用してvimプラグインを一元管理する
  • [第2回] Unite.vimを利用した強力なファイル管理/操作機構を導入する
  • [第3回] ctagsとunite-tagを利用してメソッド / クラスの定義元へのジャンプ機能を導入する
  • [第4回] neocomplcacheを利用した強力なコード補完機能を導入する
  • [第5回] neosnippetを利用してIDEと遜色ないスニペット機能を導入する
  • [第6回] gitvを利用してvimからgitを快適にブラウジングする
  • [第7回] vimprocを利用してカーソル位置部分のテスト(Spec)のみをvimから走らせる

次回は、まずはNeoBundleのお話です。すでに使ってるよって方も多いと思いますが、まずこれを導入している前提でないと他のプラグインの導入方法の説明が面倒なのと、NeoBundleとプラグインたちを上手く管理するための.vimrcの知見も書いてみようと思います。

vim で csv をいじるときに便利なキーマップ

$
0
0

エクセルのでセルの入力中にesc押すと入力が全部キャンセルされるのつらい。

場合によっては一度 CSV に書きだして vim で編集したほうが速いかもしれない。速くなくても精神衛生上よいかもしれない。

ということで便利そうなキーマップを設定。

nnoremap tl f,l
nnoremap th F,h
nnoremap td F,lvf,hd
nnoremap ts F,lvf,hc
nnoremap ty F,lvf,hy
nnoremap tp F,lvf,hp

tキーをprefixにした。
上から

  • 右セルに移動
  • 左セルに移動
  • セル内削除
  • セル内削除してインサートモード
  • セル内コピー
  • セル内を選択してペースト

vim の :highlight をファイルに書き出す

$
0
0
$ vim -e +"redir! > list.txt" +hi +q!

一瞬 vim が立ち上がった後に list.txt を見ると :hi の結果が書き込まれてます。

現場で使えるVimコマンド総集編

$
0
0

初めに

welcome, user want to be vimmer.

vim-github repository

ただ、この記事ではNeoBundleやカラーや独自セッチング、プラグインについては扱いません。

対象読者

  • vim派ではないものの興味がある
  • エディタ選びに迷っているので手始めにvimを触ってみようと思った
  • ちょっとコマンドを忘れたので見たい
  • 暇だった

基礎編

カーソル移動

commanddetail
hmove left
jmove down
kmove up
lmove right
0先頭文字
$行末
(数字){1}e数字分移動
gg先頭
G最後尾

起動

vim ファイル名

終了

変更なし

<ESC> :q!

変更あり

<ESC> :qw

文字挿入

commanddetail
iカーソル位置に追加
aカーソルの次の文字として追加
A行末に追加

削除

commanddetail
d$カーソル位置から行末まで削除
deカーソル位置から空白を含まない単語の末尾まで削除
dwカーソル位置から空白を含む単語の末尾まで削除
(数字)?dd指定行削除▶バッファに格納される

cf.)hoge fuga

# oの位置で各コマンドを打つと想定
d$ ▶ h
de ▶ h fuga
dw ▶ hfuga

リテイク

commanddetail
u直前のコマンドの取り消し
U行全体の変更取り消し

検索

commanddetail
/検索ワードnで移動。%で記号の無効化
:set hls isハイライト表示になる
:nohlsearchハイライト表示消す

置換

commanddetail
:s/元の文字/置換後の文字/g元の文字を置換後の文字へ

切り貼り

commanddetail
v+yビジュアルモードにして選択後ヤンクする
pヤンクしたものを貼り付け

補完

commanddetail
:文字+Cntr-D補完文字出す
:文字+<TAB>文字を保管する

cf.):h + Cntr-D

:h
hardcopy   helpfind   helptags   highlight
help       helpgrep   hide       history
:h

その他

linuxコマンド

:!+コマンド

特定の文字をコピーしたい

退避
v + : + w ファイル名
ペースト
:r + ファイル名

最後に

実際、網羅しておらず、ほんのすこしの機能を紹介したに過ぎません。
困ったら、適宜 helpでオンライン検索ができるのでこちらを活用しましょう。
最後にエディタのコマンドはやって慣れるしかありません。

There is no substitute for hard work.

FinderはもちろんAdobe Reader、Kindleもvimライクなhjkl操作したい(Karabiner事始め)

$
0
0

Finderの設定はこちら

最近、vimに夢中になりつつあるのですが、vimを使っていると移動操作←↓↑→をhjklで実現したくなります。

Adobe Readerをhjklで使いたかった理由

最初Adobe Readerでhjklを使いたいと思いました。なぜAdobe Readerなのかは、おそらくMacただ一つの見開きで表示できるPDFビューアーだからです。

そこでMacだとキーバインドの変更はキーボードカスタマイズツールKarabiner(旧KeyRemap4MacBook)で実現できそうなことがわかりました。

『Vim以外でVimする: Mac編』Karabinerマニュアル『設定の追加の方法』などをなんとなく見て、多すぎるデフォルトの設定をさわったりしてみたのですが、まずAdobe Readerに設定が施せるのかわかりません。プロプライエタリなソフトなので根本的に無理な場合もあるのかもと思いました。(今考えてみると、たぶんKarabinerはプロプライエタリなソフトにこそ力を発揮するソフトですね。)

そこでダメモトでGoogle Group Karabiner-jpへ質問してみました。

で、なんとKarabinerの作者の方からAdobe Reader用のprivate.xmlをいただきました。(コードの下にGitHubのリンクもあります。)

Adobe Reader用の設定

private.xml(for_Adobe_Reader)
<?xml version="1.0"?>
<root>

  <item>
    <name>Use "hjkl" keys as arrow keys in Adobe Reader.</name>
    <identifier>private.hjkl_arrow_adobe_reader</identifier>
    <only>ADOBE</only>
    <uielementrole_not>AXTextField, AXTextArea</uielementrole_not>
    <modifier_only>
      ModifierFlag::NONE,
      ModifierFlag::SHIFT_L | ModifierFlag::NONE,
      ModifierFlag::SHIFT_R | ModifierFlag::NONE,
    </modifier_only>
    <autogen>__KeyToKey__ KeyCode::H, KeyCode::CURSOR_LEFT</autogen>
    <autogen>__KeyToKey__ KeyCode::J, KeyCode::CURSOR_DOWN</autogen>
    <autogen>__KeyToKey__ KeyCode::K, KeyCode::CURSOR_UP</autogen>
    <autogen>__KeyToKey__ KeyCode::L, KeyCode::CURSOR_RIGHT</autogen>
  </item>

</root>

https://github.com/tekezo/Files/blob/master/Karabiner/private.hjkl_arrow_adobe_reader/private.xml

で、実際に~/Library/Application Support/Karabiner/private.xmlへ保存し、GUIで[Reload XML](キャプチャ)を試してみると動く。(詳細はわかりやすいGUIキャプチャ画面付きの『設定の追加の方法』を参照してください。)とにかくうれしい。

補足:Adobe Acrobat Reader DCも、あとで見るKarabinerのEventViewerがApplication Bundle Identifierの値が同じなので、この設定で動作します。

遅ればせながら調べてみると、『MacのPreview.appでvimキーバインドを使って移動』の記事もありました。

そして、この記事を書いている間に、ドキュメントを調べる内にできることがだんだん掴めてきました。

シンタックス1

使われているシンタックスはBasic syntaxなどにあるように、次のようになっています。

<name>:[Reload XML]のボタンをおした時にKarabinerのPreference Panceにチェックリストの説明として表示されます。
<identifier>:設定IDです。ユニークなもので、private.プリフィックスをつけることが推奨されています。
<only>:設定するアプリを指定します。今回はAdobe ReaderとKindleの<item>をそれぞれ作成していますが、<only>ADOBE, KINDLE</only>と複数指定することもできます。指定できる名前はシンタックス2で説明している<appname>で定義されているIDです。
<uielementrole_not>:設定しないUI element roleを指定します。今回の設定ではテキストフィールド(AXTextField)とテキストエリア(AXTextArea)を除外しています。
<modifier_only>:今回の設定ではモディファイア(AltやCtrlなどキーの振る舞いを変更するキー)が押されていないときか、
シフトキーが押されていたときだけ<autogen>で設定されたキーバインドを有効にしています。
<autogen>:キーに割り振る振る舞いを定義します。

Kindleの設定

電子書籍管理はCalibreを使っているのですが、Kindle for Macの辞書機能は捨てがたいものがあります。

最初アプリの指定方法が、いただいたprivate.xmlには<appdef>が存在しておらず、途方にくれたのですが、Filter: Specify applicationに回答がありました。(Adobe Readerの場合はすでに/Applications/Karabiner.app/Contents/Resources/appdef.xmlADOBEとして定義されているのでprivate.xmlで改めて<appdef>を定義する必要がなかったのでした。)

Filter: Specify applicationにあるようにKarabinerのEventViewerを起動して、Application Bundle Identifierにてアプリが特定できれば(キャプチャ)、下記の<appdef>を追加するだけです。あとはAdobe Reader用の設定を少し修正するだけでした。(<?xml version="1.0"?>
<root>
</root>の間に貼り付けてください。)

private.xml(snippet_for_kindle)
<appdef>
    <appname>KINDLE</appname>
    <equal>com.amazon.Kindle</equal>
  </appdef>

  <item>
    <name>Use "hjkl" keys as arrow keys in Amazon Kindle</name>
    <identifier>private.hjkl_arrow_amazon_kindle</identifier>
    <only>KINDLE</only>
    <uielementrole_not>AXTextField, AXTextArea</uielementrole_not>
    <modifier_only>
      ModifierFlag::NONE,
      ModifierFlag::SHIFT_L | ModifierFlag::NONE,
      ModifierFlag::SHIFT_R | ModifierFlag::NONE,
    </modifier_only>
    <autogen>__KeyToKey__ KeyCode::H, KeyCode::CURSOR_LEFT</autogen>
    <autogen>__KeyToKey__ KeyCode::J, KeyCode::CURSOR_DOWN</autogen>
    <autogen>__KeyToKey__ KeyCode::K, KeyCode::CURSOR_UP</autogen>
    <autogen>__KeyToKey__ KeyCode::L, KeyCode::CURSOR_RIGHT</autogen>
  </item>

シンタックス2

<appdef>:デバイスを定義します。
<appname>:ユニークなID。/Applications/Karabiner.app/Contents/Resources/appdef.xmlに定義済みのものと被らないようにしましょう。
<equal>:KarabinerのEventViewerを起動してApplication Bundle Identifieに表示されるIDです。

その他動作対象のフィルター方法

Karabinerが動作する対象をフィルターする方法は、アプリ名で指定する方法(Filter: Specify application)の他には次のものもあります。

Finderの設定

Finderの設定はデフォルトで入っています。『hjklキーでFinderを操作する』を参照してください。更に設定を追加する場合は標準設定を変更する方法(How to modify prepared settings)もありますし、Filter: Specify ui element roleにFinder用のhjklの設定があるのでそれを元に編集することもできると思います。

おまけ(Adobe Reader+Kindle+Calibre+の設定)

Calibreは電子書籍管理アプリで独自のビューアーもついているのですが、ビューアーは標準でvimライクに操作できるのですが、管理アプリは使えません。Adobe ReaderもKindleも同じ設定なので、一緒にまとめました。(あとCtrl+NとCtrl+Pで↓↑の設定の浮気をしています。)

private.xml
<root><appdef><appname>KINDLE</appname><equal>com.amazon.Kindle</equal></appdef><appdef><appname>CALIBRE</appname><equal>net.kovidgoyal.calibre</equal></appdef><item><name>Use "hjkl" keys as arrow keys and "Crtl+N" and "Ctrl+P" as up/down in Adobe Reader, Kindle, Calibre</name><identifier>private.hjkl_and_ctrln_and_ctrlp_arrow_adobereader_kindle_calibre</identifier><only>ADOBE, KINDLE, CALIBRE</only><uielementrole_not>AXTextField, AXTextArea</uielementrole_not><autogen>__KeyToKey__ KeyCode::H, ModifierFlag::NONE, KeyCode::CURSOR_LEFT</autogen><autogen>__KeyToKey__ KeyCode::J, ModifierFlag::NONE, KeyCode::CURSOR_DOWN</autogen><autogen>__KeyToKey__ KeyCode::K, ModifierFlag::NONE, KeyCode::CURSOR_UP</autogen><autogen>__KeyToKey__ KeyCode::L, ModifierFlag::NONE, KeyCode::CURSOR_RIGHT</autogen><autogen>__KeyToKey__ KeyCode::N, ModifierFlag::CONTROL_L, KeyCode::PAGEDOWN</autogen><autogen>__KeyToKey__ KeyCode::N, ModifierFlag::CONTROL_R, KeyCode::PAGEDOWN</autogen><autogen>__KeyToKey__ KeyCode::P, ModifierFlag::CONTROL_L, KeyCode::PAGEUP</autogen><autogen>__KeyToKey__ KeyCode::P, ModifierFlag::CONTROL_R, KeyCode::PAGEUP</autogen></item></root>

参考

Viewing all 5755 articles
Browse latest View live


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