ConEmu+WSL環境でvimの矢印キーが使えない場合

ConEmuを使ってWindows Subsystem for Linuxを操作しているのだが、 vimを使うときに矢印キーが使えない現象が発生したのでメモ

conemu.github.io

公式の解決法としては、wslbridgeを経由する形で実行するようにタスクを作って、それを使えという感じのようだが、 この方法だと、私の環境だとうまくzshを利用することができなかった(文字化けが発生したりした)

なにか別の方法はないかなと、いろいろぐぐってみたのだが、vim側の設定を変えることでうまくいったのでメモ

 set term=builtin_ansi

tigで日本語が文字化けする

WSL(Windows Subsystem for Linxu)/Bash on Windowsにて開発環境を整えているときに、 aptで入れた tig で日本語が文字化けする現象にあたったのでメモ

mfham.hatenablog.com

ncursesのビルドは基本的に上記の手順通りにやればよかった。 私の環境だと configure: error: no acceptable cc found in $PATH とか ./configure: 18395: ./configure: make: not found とか言われたので、適当に必要なものをインストールした。

sudo apt-get install build-essential

ncursesのインストールが完了したあと、今度はtigをビルドした。

wget https://github.com/jonas/tig/releases/download/tig-2.4.1/tig-2.4.1.tar.gz
tar xvzf tig-2.4.1.tar.gz
cd tig-2.4.1
./configure
make
sudo make install

これでまだ文字化けしていたので、下記の設定を.zshrc(または.bashrcとか)に入れたらうまくいった

export LC_ALL=en_US.UTF-8

WSL(Windows Subsystem for Linux/Bash on Windows)でvagrant sshができない問題とその対処

WSLで vagrant ssh しようとしたら Permission denied (publickey). と言われてログインできない事象に遭遇したので対処した。

まず、vagrant ssh 時に実行されるSSHコマンドを自分で書いて、どういうエラーなのかを確認したところ、下記のようになっていた。

% ssh vagrant@127.0.0.1 -p2222 -i .vagrant/machines/default/virtualbox/private_key
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0777 for '.vagrant/machines/default/virtualbox/private_key' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key ".vagrant/machines/default/virtualbox/private_key": bad permissions
Permission denied (publickey).

VMの鍵である .vagrant/machines/default/virtualbox/private_keyパーミッションが0777になっているため繋げられないとのことであった。 というのも、今回Vagrantを導入したリポジトリWindowsファイルシステム上( /mnt/c 配下 )にしているため、パーミッションがデフォルトではすべて0777になる。 結果として、生成された private_key も0777になり、SSHクライアントに怒られる。

解決策

最近のWSLではWindowsファイルシステムについてもパーミッションを自由に設定できるようになったらしい。 ただしデフォルトではその機能が有効になっていないので、有効にする必要がある。

まず、 /etc/wsl.conf を下記の内容で作成する

[automount]
options = "metadata"

設定後WSLを再起動する必要がある。 Windowsを起動させたまま再起動させるのはめんどくさそうだったので、普通にPCごとリブートさせた。

再起動後、private_keyのパーミッションを0600にしたら完了。普通に vagrant ssh できるようになった。

$ chmod 600 .vagrant/machines/default/virtualbox/private_key
$ vagrant up
$ vagrant ssh

Windows Subsystem for Linux (WSL) にてvagrantを実行するときにハマったときのメモ

Windows Subsystem for Linux = Bash on WIndowsにてvagrantを使って開発環境を構築する際に引っかかったのでメモしておく。 基本的なインストール方法については色々なブログで書かれているので省略。

www.gosoly.com

Command: ["hostonlyif", "create"] error with windows 10

ホストオンリーアダプタの設定中にこける問題。

Command: ["hostonlyif", "create"]

Stderr: 0%...
Progress state: E_FAIL
VBoxManage.exe: error: Failed to create the host-only adapter
VBoxManage.exe: error: Code E_FAIL (0x80004005) - Unspecified error (extended info not available)
VBoxManage.exe: error: Context: "enum RTEXITCODE __cdecl handleCreate(struct HandlerArg *)" at line 70 of file VBoxManageHostonly.cpp

GithubのIssueにて回避策が乗っていたので、それを適応したところ動いた。(私の環境だと設定後、再起動が必要だったが)

github.com

1. Goto C:\Program Files\Oracle\VirtualBox\drivers\network\
2. There are two folders, go inside both of them and right click on .inf and click Install
3. Head over to Control Panel\Network and Internet\Network Connections
4. Right click on Network Adapter and choose Properties
5. C lick on Install => Service
6. Under Manufacturer choose Oracle Corporation and under Network Service, choose VirtualBox NDIS6 Bridged Networking driver
7. Ok and Close

failed to create the raw output file (VERR_PATH_NOT_FOUND)

% vagrant up 
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Checking if box 'ubuntu/xenial64' is up to date...
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
    default: Adapter 2: hostonly
==> default: Forwarding ports...
    default: 22 (guest) => 2222 (host) (adapter 1)
==> default: Running 'pre-boot' VM customizations...
==> default: Booting VM...
There was an error while executing `VBoxManage`, a CLI used by Vagrant
for controlling VirtualBox. The command and stderr is shown below.

Command: ["startvm", "3a8e4eed-b3f0-4f53-acef-0a59c57abe96", "--type", "headless"]

Stderr: VBoxManage.exe: error: RawFile#0 failed to create the raw output file /mnt/c/Users/hoge/ubuntu-xenial-16.04-cloudimg-console.log (VERR_PATH_NOT_FOUND)
VBoxManage.exe: error: Details: code E_FAIL (0x80004005), component ConsoleWrap, interface IConsole

シリアルポート接続の設定を上書きして、切断状態にすることで正常に起動するようになるとのこと。

config.vm.provider "virtualbox" do |vb|
  vb.customize [ "modifyvm", :id, "--uartmode1", "disconnected" ]
end

stackoverflow.com

WindowsでCapslockをShift+Ctrlにリマップする

Windows機にて開発環境を構築する際に、Macで設定していたCommandキーを使ったショートカットを同じ感覚で使えるようにしたかったので、CapsLockをShift+Ctrlにリマップすることで、それらしい感じにした。 思っていたよりそれらの設定がめんどくさかったのでメモしておく。

AutoHotKeyのインストール

キーのリマップとか凝ったことができる便利なツール。最新版と少し前のバージョンで記法が若干変わっているので、ネット上の情報を漁るときは注意。 今回は少し前のv1.1.26.01を使うこととした。下記のリンクからダウンロード&インストール

https://autohotkey.com/download/1.1/AutoHotkey_1.1.26.01_setup.exe

ChangeKeyのインストール

実はAutoHotKeyだけではCapslockをShift+Ctrlにリマップすることができなかった。 これはAutoHotKeyがHookする手前の段階でOS側がCapsLockについてキー情報を変更してしまっているからであるとのこと。 具体的にはAutoHotKeyでCapsLockのUpイベントが取得できなかった。詳しくは下記を参照

既知の不具合 - AutoHotkey Wiki

解決策として、別のツールでCapslockを使っていないキーにリマップしておく必要がある。 今回はChangeKeyというツールを使ってCapslockをF12にリマップした。

forest.watch.impress.co.jp

AutoHotKeyの設定

ここまで来れば後はAutoHotKeyの設定をするだけ。 適当な名前で .ahk ファイルを作成する。

#USEHOOK
#InstallKeybdHook

*vk7Bsc058::
  SetKeyDelay -1
  Send {Blind}{Ctrl DownTemp}{Shift DownTemp}
return

*vk7Bsc058 up::
  SetKeyDelay -1
  Send {Blind}{Ctrl Up}{Shift Up}
return
#USEHOOK off

これで無事にCapslockをShift+Ctrlにリマップすることができた。

VSCodeで編集するファイルを選んだ時に、自動でエクスプローラがスクロールされる設定を無効にする

下記の設定で実現できる。

 "explorer.autoReveal": false,

Windows10でBluetoothキーボードをペアリングする際に、Windows側でPINコード入力を求められる問題

普通はWindows側にPINコードが表示され、それをキーボード側で入力することでペアリングが完了すると思うが、 なぜかWindows側で「PINコードを入れてください」というテキストボックスが出るという現象に遭遇した。 もちろんキーボードにはPINコードを表示する機能などないので困った。

環境: Windows 10 
Bluetoothレシーバー: LBT-UAN05C2

解決策

価格.com - 『ペアリングに一度失敗したらパスコードが二度と表示されません。』 エレコム TK-FBP052WH [ホワイト] のクチコミ掲示板

上記の掲示板に回避方法が書いてあって事なきを得た。 具体的には、Windows側に有線で別のキーボードをつないで、 PINコードの入力を求められた時にテキストボックスに適応な数字を投入し、 すぐにBluetoothキーボード側でも同じ数字を入れてEnterを押すというもの。

これでなぜかペアリングができた。 他のBluetoothレシーバーでも起こる現象のようなので、Windows側の問題であろうと思う。

mkdirをディレクトリがない場合のみ実行したい場合

シェルスクリプトの中でディレクトリがないなら掘るという処理をしたい場合はそれなりにある。 例えばログフォルダを先に作るとか。

ifを使って順当にやる方法もあるのだが、下記の方法が一番楽である。

mkdir -p directory_name

VSCodeで簡単にペイン分割するショートカットを設定する

SublimeからVSCodeに乗り換え中なのだが、SublimeのOrigami拡張で行っていた楽ちんペイン分割をVSCodeでやりたくていろいろ調べた。

結論

f:id:riosu:20180808164108g:plain

デフォルトでできるがキーアサインがされていないので設定してあげれば良い

[
    {
        "key": "cmd+d",
        "command": "workbench.action.splitEditorRight"
    },
    {
        "key": "shift+cmd+d",
        "command": "workbench.action.splitEditorDown"
    }
]