ParallelsのWindowsでUSキーボードを使う
下記サイトの手順でGoogleIMEの所をOffice IMEに読み替えて試したところ、うまく行きました。
USキーのMacでWindowsをJISキーのMacぽく使う方法
http://ysnhrk.blogspot.jp/2013/10/usmacwindows.html
必要な部分だけピックアップした備忘録を残しておきます。
環境
- OS X Mavericks 10.9.4
- Parallels Desktop 10 for Mac
- 仮想化(Windows7 Home Premium)
- Microsoft Office 2013
- Microsoft IME 2010
1. Karabiner(旧KeyRemap4MacBook)からprivate.xmlを開く
タスクバー > Preferences... > Misc&Uninstall > Open private.xml > エディタで開く
private.xmlに以下を書き足す。
<?xml version="1.0"?> <root> <list> <item> <name>追加</name> <item> <name>左右のコマンドキー(⌘)を「英数/かな」としても使う</name> <appendix>(左/右コマンドキーの空打ちで「英数/かな」)</appendix> <appendix>(コマンドキーを押している間に他のキーを打つと通常のコマンドキーとして動作)</appendix> <identifier>remap.jis_command2eisuukana_prefer_command_notvirtualmachine</identifier> <not>VIRTUALMACHINE</not> <autogen>__KeyOverlaidModifier__ KeyCode::COMMAND_L, KeyCode::COMMAND_L, KeyCode::JIS_EISUU</autogen> <autogen>__KeyOverlaidModifier__ KeyCode::COMMAND_R, KeyCode::COMMAND_R, KeyCode::JIS_KANA</autogen> </item> <item> <name>左右のコマンドキー(⌘)をVirtualMachineでも「英数/かな」として使う</name> <appendix>(VirtualMachine上で左/右コマンドキーを空打ちすると[Ctrl+Shift+F11/F12])</appendix> <appendix>(コマンドキーを押している間に他のキーを打つと通常のコマンドキーを送信)</appendix> <appendix>(Parallelsのデフォルト設定では同時押しのコマンドキーは[Ctrl]と解釈される)</appendix> <identifier>remap.jis_command2eisuukana_prefer_command_virtualmachine</identifier> <only>VIRTUALMACHINE</only> <autogen>__KeyOverlaidModifier__ KeyCode::COMMAND_L, KeyCode::COMMAND_L, KeyCode::F11, ModifierFlag::CONTROL_L | ModifierFlag::SHIFT_L</autogen> <autogen>__KeyOverlaidModifier__ KeyCode::COMMAND_R, KeyCode::COMMAND_R, KeyCode::F12, ModifierFlag::CONTROL_L | ModifierFlag::SHIFT_L</autogen> </item> </item> </list> </root>
2. Karabinerの設定を有効にする
タスクバー > Preferences... > Change Key
以下の[▼追加]のチェックボックスを付ける
3. Microsoft Office IME2010を開く
IMEバーを選択から設定 > インストールされているサービス > Microsoft Office IME2010 > プロパティ > 全般 > 編集操作 > 変更
以下のようにCtrl+Shift+F11,Ctrl+Shift+F12を設定する
[キー追加]で左コマンドキー、右コマンドキーを押下するだけCtrl+Shift+F11,Ctrl+Shift+F12と表示されることから正しくマッピングされていることが確認できる。
Error: ENOENT, stat 'C:\Users\xxx\AppData\Roaming\npm'
winodws7 x64の環境でnpm install実行時にエラーが出た。
npm install Error: ENOENT, stat 'C:\Users\xxx\AppData\Roaming\npm'
参考程度にnpmのバージョン
npm -v 1.4.21
ぐぐったところ、stackoverflowでも同じ質問が出ていました。
Node.js/Windows error: ENOENT, stat 'C:\Users\RT\AppData\Roaming\npm' - Stack Overflow
解決策は、手動でフォルダを作るで解決した。
mkdir 'C:\Users\xxx\AppData\Roaming\npm'
選択肢からコマンドを選んで実行する
Intro
新しいPluginを入れてもコマンドやキーバインドが覚えきれないので、
あらかじめ用意して選択肢から実行出来るようにする。
選択肢から実行するための関数として、inputlistがあるので使用する。(詳細は、:h inputlist)
Contents
.vimrcでも何処でも良いので以下を記載する。
let g:scc = {} " sample let g:scc.unite = [ \ ['Sample Uniteの選択リスト', ''], \ ['> File', 'Unite file'], \ ['> Find', 'Unite find'], \ ['> Dir', 'Unite direcotry']] function! SelectCmd(key) let a:viewlist = [] let a:idx = 0 let a:input = 0 let a:slist = g:scc[a:key] let a:head = '' while a:idx < len(a:slist) if a:idx == 0 call add(a:viewlist, a:slist[a:idx][0]) else execute 'let a:head = printf("[%-' . strlen(len(a:slist)) . 's]", a:idx)' call add(a:viewlist, a:head . ' ' . a:slist[a:idx][0]) endif let a:idx = a:idx + 1 endwhile let a:input = inputlist(a:viewlist) echo "\n" if a:input < 1 || a:input > len(a:slist) echohl ErrorMsg echo 'Selected-Number('.a:input.') is range over.(0-' . (len(a:slist) - 1) . ')' echohl None return endif echohl MoreMsg echo '> ' . a:slist[a:input][1] echohl None execute a:slist[a:input][1] endfunction command! -nargs=1 SelectCmd \ call SelectCmd(<q-args>)
実行する
:SelectCmd unite
自分で好きな選択肢を作りたい場合、下記形式で追加する
let g:scc.[任意のa-z,A-Z,0-9,_(アンダースコア)] = [ " 第1要素は、表示される文字列 " 第2要素は、選択時に実行されるコマンド(例> :ls, :h inputlist,など) " このサンプルだと> Fileを選択した場合、:Unite fileが実行される \ ['Sample Uniteの選択リスト', ''], " 説明文 \ ['> File', 'Unite file'], " 選択肢1 \ ['> Find', 'Unite find'], " 選択肢2 \ ['> Dir', 'Unite direcotry']] " 選択肢3 " 何個でも良い。
inputlistからinputlistを呼び出すことも出来る
" Sample let g:scc.unite = [ \ ['Sample Uniteの選択リスト', ''], \ ['> File', 'Unite file'], \ ['> Find', 'Unite find'], \ ['> Dir', 'Unite direcotry'], \ ['> SampleCmd MRUから選択', 'SelectCmd mru']] let g:scc.mru = [ \ ['Sample MRUの選択リスト', ''], \ ['> ファイルのMRU', 'MRUFile'], \ ['> フォルダのMRU', 'MRUDir'], \ ['> NetrwのMRU', 'MRUHistory']]
session.vimを使う
Intro
session.vim : Extended session management for Vim
http://www.vim.org/scripts/script.php?script_id=3150
Sessionを保存、起動時にSessionを読み込むことが出来るプラグインの設定
(要は前回の終了時に戻したり、好きな状態に戻せるということ)
[gvim起動時にSessionで復元した画面]
* どうでもいいことだけど、gvimのiconは気分転換に化け猫屋の素材に変えているので違うiconになってます。
Contents
1. PluginをDownloadしてくる
2. 各自のruntimepathの通った場所に放り込む(一般的には、runtimeフォルダ以下?かな)
[g:session_directory]を設定しない場合のデフォルト値は下記のとおり
vimrcで環境設定(iicebar version)
(2010/11/07 AM5:49)動作が気に入らなかったので、終了時の動作を変更できるようにした。
" ↓新規変数を追加 let g:session_directory = "Sessionの保存先" " 設定するかどうかは任意 let g:session_winsize_not_remember = 1 "Windowサイズを覚えない:1 覚える:0 let g:session_vimstartup_columns = 100 "列 let g:session_vimstartup_lines = 50 "行 function! ExitVimFuncSession() if g:session_winsize_not_remember == 1 " 前回終了時のWindowsサイズではなく、幅、高さを固定値で起動する execute "set columns=" . expand(g:session_vimstartup_columns) execute "set lines=" . expand(g:session_vimstartup_lines) endif SaveSession endfunction command! ExitVimFuncSession call ExitVimFuncSession() " 引数を指定しなかった時のみ、Sessionを有効にする if argc() == 0 " 起動時にSessionを読み込む let g:session_autoload = 1 " Sessionファイル名を聞かず勝手に読み書きする let g:session_autosave = 1 augroup MySession " Vim終了時にSassionを保存する au VimLeave * ExitVimFuncSession augroup END else " 明示的に無効にする let g:session_autoload = 0 let g:session_autosave = 0 endif
これだけで、前回終了時の状態を簡単に復元できる。
また、上記設定だとdefault.vimという名前でSessionが保存される。1つ目のvim起動時はSessionが読み込まれて、2つ目のvim起動時ファイル無しでも読み込まれない。…あれ?矛盾してる。実は既に実装されてて↑の記述で要らないのがあったかもしれない、ちょっと見ておこう…。(2010/11/07 PM17:00)追記
Comment
- 実は触り始めてまだ
30分だけど、良さそうだと思ったのでついカッとなって紹介した。
(これ書いて修正してるうちに数時間ほど使用してた。) - 間違えてる箇所があればご指摘ください。
Repo管理しているpluginをruntimepathに追加する
Intro
github, bitbucketで管理されてるPluginを楽にアップデート/追加/削除する。(vim的な意味で)
頻繁に更新されるので最新同期して、とりあえずコピペしてPluginを更新するとファイルの追加削除があった時に、いらないファイルが残って困りそうなので、Cloneしたディレクトリをruntimepathに追加する。
(Repoのclone方法は、Winならばtortoisehgや、tortoisegitとかで簡単にできる、RepoのCloneについては説明を省略)
Contents
下記のような、ディレクトリ階層を作成する。
Source(vimrc)
簡単に書くと、
1.Plugin毎のディレクトリを指定する。
2.ディレクトリが存在しない場合、runtimepathに追加しない
3.ディレクトリが存在しない場合、Pluginの設定は読み込まない
" runtimepathに追加して、pluginを追加する " ↓RepoをCloneしているディレクトリを指定 let $PLUGIN_DIR = "D:/works_other/vim_plugin" let $L9 = expand($PLUGIN_DIR) . "/ns9tks_vim-l9" let $FUF = expand($PLUGIN_DIR) . "/ns9tks_vim-fuzzyfinder" " let $NEO = expand($PLUGIN_DIR) . "/shougo_neocomplcache" " ↑コメントアウトしておけば、isdirectoryのチェックで偽になるので、Pluginは読み込まれない let $FIR = expand($PLUGIN_DIR) . "/shougo_vimfiler" " l9 if isdirectory($L9) " ←ディレクトリが見つからない場合、runtimepathに追加されない。 set runtimepath+=$L9 endif " FuzzyFinder if isdirectory($FUF) set runtimepath+=$FUF endi ...省略(↑のような記述を繰り返す) " vimrcの好きな所に、Plugin毎の設定を書く " L9 Library if isdirectory($L9) " No Settings endif " FuzzyFinder if isdirectory($FUF) let g:fuf_infoFile = expand($LOAD) . "fuf_file.txt" let g:fuf_modesDisable = [''] let g:fuf_file_exclude = '\v\~$|\.(o|exe|bak|swp)$|(^|[/\\])\.(svn|hg|git|bzr)($|[/\\])' endif ...省略(↑のような記述を繰り返す)
バッチファイル実行後にバルーンを表示させる
Intro
バッチファイル実行後にバルーンを表示させるvimscriptを書いてみました。
以下の機能を持ちます
- ファイル実行時(バッチファイル)の結果をScratchバッファに出力する
- 実行終了と同時にバルーンを表示させる
バルーンの表示に、使用したソフトは以下のとおりです。
ns9log - Balloonly: Windowsでballoon ToolTipを表示するだけのプログラムCommentsAdd Startoton
http://d.hatena.ne.jp/ns9tks/20091217/1261056787
実行前 | 実行後 |
---|---|
test.batを読み込んでいる状態 | バルーンが表示される、Scratchに実行結果を出力 |
動作環境
導入手順
- Balloonlyを入手する
- gvim.exeの入っているフォルダにballoonly.exeを入れる
もしくは、置いた場所にパスを通す - .vimrcに追記か、ファイル名を付けて/pluginフォルダに保存する
- テスト用にtest.batを作成する
Contents
Vimscript Source
.vimrcに以下を追加するか、ファイル名(ex:execbat.vim)を付けて保存して/pluginフォルダにでも配置する
"----------------------------------------------------------------------------- " 設定 "----------------------------------------------------------------------------- " 上書き:write, 追記:add let g:output_buffer_mode = "add" " 0 - 30000 msec let g:exec_batfile_compleate_sec = 5000 " balloで表示させる文字列 let g:exec_batfile_compleate_msg = "Compleate" " 現在のバッファをstartコマンドで実行する nnoremap <silent><SPACE>xx :call ExecEndBallo()<CR> " 補助関数は以下のサイトで掲載されていたものを改変して使用 " http://vimwiki.net/?tips%2F107 "----------------------------------------------------------------------------- " 補助関数 "----------------------------------------------------------------------------- " 指定した名前を持つバッファが既に存在するならそこにカーソルを移動。 " 存在しないなら作成。 function! SingletonBuffer(bufnr, split) let winlist = FindWindowsByBufnr(a:bufnr) if empty(winlist) if a:split split endif exe "b " . a:bufnr else exe winlist[0] . "wincmd w" endif endfunction " 指定したバッファを含んでいるウィンドウ番号のリストを返す。 function! FindWindowsByBufnr(bufnr) return filter(range(1, winnr("$")), 'winbufnr(v:val)==' . a:bufnr) endfunction " 上書き:write, 追記:add let g:output_buffer_mode = "add" " 0 - 30000 msec let g:exec_batfile_compleate_sec = 5000 " balloで表示させる文字列 let g:exec_batfile_compleate_msg = "Compleate" function! ExecEndBallo() " 実行するバッチファイル let a:exec_batfile_fullpath = shellescape(expand("%:p")) let a:exec_batfile_name = bufname("%") if exists("g:output_buffer_bname") if (bufexists(g:output_buffer_bname) > 0) let a:bufexists_flag = 1 else let a:bufexists_flag = 0 endif else let a:bufexists_flag = 0 endif " Buffer Exists if (a:bufexists_flag) " 存在する場合は、そのバッファを呼び出す call SingletonBuffer(g:output_buffer_nr, 1) else " Scratchバッファ作成 execute "Scratch" let g:output_buffer_bname = bufexists("%") let g:output_buffer_nr = bufnr("%") endif if (g:output_buffer_mode == "write") " 既存の内容を削除 execute "%delete" let a:position = getpos(".") else execute "%" let a:position = getpos(".") endif execute "r!echo /--------------------------------------------/" execute "r!echo / Exec File : " . a:exec_batfile_name execute "r!echo / Exec Full : " . a:exec_batfile_fullpath execute "r!echo / Output Date : " . strftime("%Y/%m/%d %H:%M:%S") execute "r!echo /--------------------------------------------/" execute "r!echo /--------------------------------------------/" execute "r!echo / Start Execute /" execute "r!echo /--------------------------------------------/" " 標準出力を読み込み execute "r!" . a:exec_batfile_fullpath if (executable("balloonly.exe")) execute '!start balloonly.exe ' \ . g:exec_batfile_compleate_sec . ' "' \ . a:exec_batfile_name . '" "' \. g:exec_batfile_compleate_msg .'"' endif execute "r!echo /--------------------------------------------/" execute "r!echo / End Execute /" execute "r!echo /--------------------------------------------/" "実行開始位置に戻る call setpos(".", a:position) endfunction
BAT File
test.batとして、以下を好きな場所に保存する
(実行終了まで3秒くらい時間がかかるバッチファイル)
@echo off rem 以下を参考にtest.batを作成した rem http://trash-area.com/archives/219 echo testプログラム cd "C:\" ping localhost -n 2 > nul ping localhost -n 2 > nul ping localhost -n 2 > nul dir /a
Comment
- 調べてもバッファの操作する関数が上手く見つけられない
- 内部コマンドの実行結果をバッファに出力するやり方がこれしか分からなかった(r!echo 内容)
もっと良いやり方がある気がする - vimscriptで頑張らなくてもバッチファイルの最後尾にballoonly.exeを書くだけでも、バルーンは表示できる
- bitbucketにソースファイル挙げようと思ったけど、まだ色々悩ましい部分が実はあるのでひとまずソース丸ごと掲載して公開
まだ完成というより、"動いた!!"という感じでもっと煮詰めたい部分があったり。