ごーごごー

Surface Go、社内販で買いました。Officeなし版を買うには会社で買うしかない、ということで仕事で使うという大義名分で(実際に仕事でも使うが)注文してもらいました(^^;

今はほとんど見向きもされないSurface3のリプレースです。
会社では 常時 OneNoteを立ち上げて、完全にメモ帳用途で使ってるので、Surface Goのサイズ感と絶妙のCPUチョイスがハマって、Surface3を捨て速攻で買い替えです(^▽^)/

最近知ったんですが、アメリカの Amazon でもカートに入れると日本円で表示される仕様になってるっぽい(設定する必要はあるが)。日本のAmazonアカウントのまま、アメリカのAmazonでカートに入れた商品の決済画面に進むと配送先(Delivered to)が自動的に日本のamazonアカウントで登録されている住所になり、「クレジットカード番号を入れろ!」 画面がフツーに出るやん・・・。
日本では英語配列のタイプカバーはブラックのみなので・・・アメリカのamazonで買おうかなー、と思ったけど・・・アメリカからの送料とか配送期間とか考えると高くなるのでやめた・・・・

ってなことはさておき・・・
かねてからメモってた Surface Go買ったらやることリストを遂行

  1. WSL有効に & Ubuntu インストール(サーバー関係、ツール/ビルド関係
  2. 仕事環境インストール(gVim/chrome/FireFox/Visual Studio/Adobe Illustrator/Photoshop/ネットワークツール)
  3. そのままだと英語配列のキーボードが日本語配列として認識されるので設定変更
  4. キーボードドライバを101ドライバからAXキーボードドライバに変更(IMEトグルを右ALTキーに)
  5. タイピング環境構築 xkeymacsインストール、CAPS⇔CTRL入替)
  6. タッチパッドの設定で「シングクリックするには1本の指でタップします」のチェックを外す
    タイピング時の親指での誤タップを抑止

んで、僕的にいいところ、気に入らないところを列挙。

Surface Go のいいところ。

(1) まず何より小さい!
久しく使ってなかったカメラバック、Retrospective5 に入れてみる・・・

入るやん!!! これから通勤用のバッグにしよ。。。

(2) Surface Pro 譲りのつくりがイイ!
Windows Hello 対応のフロントカメラと、無段階で角度を調整できるキックスタンド、Surface ProのPenが使える。
Surface Penの書き心地がかなり良くなってることに驚いた。もうちょっと引っかかり(抵抗)があっても良さそうだけど、ツルツルで滑って書きにくい・・・ということはない。イイ感じ。

(3) 充電ポートが二つ!
付属している充電コードとアダプタは一体化されていて Surface Connectポートにつないで充電する仕様。しかもこのアダプタが微妙にデカいので・・・こんなの持って歩けないよ・・・ってな人は USB Type-Cのコードさえあれば USBポートから充電できてしまう!(問題点あり後述)

(4) Atomプロセッサじゃない!(^^;
Core i3 には及ばないけど、まずまずの性能。ブラウザとかオフィスソフトはフツーに使えます。
というか、この機種で性能を求めるのはアホの所業ですが、正直 Atom プロセッサは遅すぎた。。。
普通に動画もサクサクみれますし・・・でもクリエイティブ系のソフトは動けばいいや、的な感じ。
Visual Studio 入れたいけど・・・普通に使えるのかな??? Autumn Updateと同時に今度入れてみよう。

(5) ストレージの性能が良すぎ?
8GB/128GB版のSurface Goのストレージは SSD。特にシーケンシャル・リードが1GB/s 越えてます・・・。ライトはフツーなんですが・・・リード性能が飛びぬけて良いみたい。

(4)と(5)からすると、CPU(Pentium Gold)がそこそこの性能でも、SSDとCPU内臓のGPUのパフォーマンスの高さでカバーしてるから、そこそこ使えている感じがする、というのが実情じゃないかと・・・

でもPhotoshopとかのAdobe ソフトも起動の速さはそこそこ普通。起動にもっと時間がかかると思ってたけどいい意味で裏切られた感じ ^^

で・・・今度は気に入らないところ

(6) タイプAの普通のUSBポートが欲しかったな・・・。
Appleとかだとレガシーになりそうなものはバッサバッサと切っちゃうんだけど、マイクロソフトはそういうのやめて欲しいな・・・というのが正直な感想。死守して欲しかった。。。
せめて、USB Type-AとType-Cの変換アダプタ一個ぐらい標準付属品にして欲しかったな。

(7)タイプカバーの英語配列を日本でもフツーに売れよ!
Surface Proでもそうなんですが、日本ではタイプカバーは基本的にJIS配列ものしか商流にのらないです。英語配列のものがありますが、カラーバリエーションがブラック一つのみ。日本で英語配列が売れないの分かりますが・・・せめてマクロソフトの直販サイトでは全てのカラーバリエーションで英語配列をラインナップにそろえて欲しい。

(8)シャットダウンするとUSB Type-C経由の充電はできない!
起動中もしくはスリープ状態でないとUSB充電はできないみたい。そもそもSurfaceはシャットダウンするな! ってことなんでしょうね・・・。

(9) タイプカバーのキーピッチがやっぱり狭い・・・
まぁ、これはサイズ的にはしょうがない。僕の癖なのか、キーピッチが狭いと T と Yの打ち間違えが頻発・・・なかなか指が補正できない・・・これは慣れていくしかないな・・・。

2~3日使ってみてこんな感じかな・・・。とりあえず、USBケーブルをほぼ全部買いなおし or 変換コネクタを買いにいく。Type-Cのハブを買った方が安くつく感じだな・・・。

gvim(+kaoriya) + WSL Part3

:prev の続き

※この内容は事前に Part1で記述したように shell,shellcmdflagとかの変数をWSL用に変更する必要があります。

とりあえず、gVim(+kaoriya) と WSLの連携をある程度スムーズにできるようになりましたが、問題が一つ発生。
ローカルドライブだと問題はないのですが、リムーバルディスクとかネットワークドライブだと、WSL内の /etc/fstab に記述して自動マウントしてても、Windows10アプリケーションからWSLに移行した時点でカレントディレクトリが引き継げません。

ネットワークドライブを ドライブレター(Z: とか)にアサインして、cmd.exeで cd /d z: としてカレントディレクトリを変更し、bash.exe(or wsl.exe)しても、ホームディレクトリに飛ばされます。。。
カレントディレクトリを引き継いでくれるのは、c:ドライブとか、ローカルハーディスクだけのようです。ディスクタイプによって判断しているんでしょうか・・・。

これが一番困るのは、:grep コマンド。:grep コマンドの結果をQuickFixで開けるようにしているけど、カレントディレクトリ以下でローカルドライブだとなんとか使えるけど、リムーバルドライブとか、ネットワークドライブだと、パスの関係で全滅。WSLのフルパスで検索対象を渡せば grep は機能するが、QuickFixウィンドウに表示されるのはWSL側のフルパスなので 当然 gVim ではそのパスが理解できないので、結局使えない。

解決方法は、3つ。

(1) :grep をあきらめ、:vim(grep) で代替。
  ⇒ (ネットワークドライブだと特に)遅い。常用できないほど遅い。

(2) Msys の grep.exe で代替
 ( _vimrc にて set grepprg=/mnt/c/Msys64/usr/bin/grep.exe\ -n

  ⇒ WSLのみでなんとかする、という最初の趣旨から外れてしまうが・・・しょうがない。

(3) WSL側に grepの結果からパス名部分を変換するフィルタスクリプトをかます
 ( _vimrc にて set grepprg=grepwsl\ -n

  ⇒ ネットワークドライブ内のファイルを編集している時だけ検索パスをフルパス(WSL)を指定しないといけない。
  ⇒ また、若干遅くなるが、許容範囲内。。。WSLだけで完結できる。

というわけでとりあえず しばらく(3)を常用することにした。すでに Msys入れている場合は(2)の方が簡単かも・・・。ネットワークドライブのときだけ検索パスを絶対パスにする必要があるが、まぁしょうがない。

まずネットワークドライブ(例: Y)をドライブレターにアサインし、 sudo mkdir /mnt/yでディレクトリを作成し、/etc/fstabに登録する。

# /etc/fstab
LABEL=cloudimg-rootfs   /        ext4   defaults        0 0
Y: /mnt/y drvfs defaults,noatime,uid=1000,gid=1000 0 0

WSL側のpathが通っているところに(たとえば /usr/local/bin/ とか)grepwsl を作成しsudo chmod +x /usr/local/bin/grepwsl

#!/bin/sh
##############################################################################
#  wslgrep  .... WSLに入っているwslpathコマンドを使用してパスを変換 
#  2018/08/29 絶対パスに変換するオプション(-a)を追加/正規表現ちょい修正
##############################################################################
grep $@ | perl -pe 's/^([^:]+)/`wslpath -m -a $1 | tr -d "\n"`/e;'

これは単にgrepの結果を perl に渡して変換処理をしてるだけ。sedでもawkでもなんでも。単にperlに慣れているだけ。

んで、~/_vimrc に追記

;;; ~/_vimrc
set grepprg=grepwsl\ -n

ってなけで、とりあえず、なんとかなった!(^^;

start的なコマンド


台風の影響で、帰宅命令が発動され、早退してきて急に暇になった。
まぁ、そんなことは兎も角。

ほとんどのcmdやpowershellのようなコマンドプロンプト操作は WSLのUbuntuで済ませられるようになりました!が、内部コマンドの start だけは、コマンドプロンプトに頼るしかない。

cygwinならcygstart的な、wslstart みたいなコマンドが欲しいところ。ググれば github にそのものズバリの wslstart のシェルスクリプトがあったが、スクリプト的なものは使いたくないし・・・だって、他所のパソコン触るとき無いとガッカリするよね。他所様のパソコンに勝手にスクリプトファイル置いたら怒られるよね・・・。

つーか、”start . ” でカレントディレクトリのフォルダウィンドウが開ければそれでいいんですよ。。。。

ってなわけで、alias を一個追加。これなら、覚えられるし、他所のパソコン触るときもチャチャっと書ける。

alias start='cmd.exe /c start'

おいらのパソコンの ~/.bash_alias に追記した。。。

gVim の :terminal から “start .” とかやる。助かる~(^^;;;


#追記 2018/09/17
やっぱり パス変換の判別が欲しい・・・っていう欲求が出てきて、数行のシェルスクリプトをかます事にした。
WSLでのstartコマンド簡易ヘルパー

gvim(+kaoriya) + WSL Part2

:prev
この前のつづきです。

シェルをWSL(ubuntu bash)にすることで、:terminalの他、外部コマンド実行(“!” から始まるやつ)をWSL内で完結することができました。
が、ただ一点、:terminal {command} にする場合、:terminal bash -c '{command}' としないとエラーになってしまうので、これが不満。

そこで、Wslterm というユーザー定義のコマンドを _gvimrc に追加することで、ラクしよう、と、こういうわけです(^^;
ヘルプを斜め読みしてとりあえず関数とコマンドの定義の仕方を最低限覚えて、以下の記述に辿り着く。
ほんとはもっとスマートなやり方があるんだと思いますが・・・素人の思いつきです。。。

" terminal の WSLラッパー コマンド (かなり修正:2018/7/13 0:02)
" ・・・なんかトンチカンなことをやってる気がしてきた・・・
" append to ~/_gvimrc 
set shellslash
set shell=C:/WINDOWS/system32/bash.exe
set shellcmdflag=-c
set shellquote=\"
set shellxescape=
set shellxquote=

function! Wslterms(c,f,l,...)
  let cmdline = []
  let option = []
  let i = 0
  while i < a:0
    if stridx(a:000[i],'++') == 0
      call add(l:option,a:000[i])
    else
      call add(l:cmdline,a:000[i])
    endif
    let i += 1
  endwhile
  let l:options = len(l:option) ? join(l:option," ")." " : ""
  let l:cmd = "terminal " . l:options

  if len(l:cmdline) > 0
    let l:cmd = printf("%s%s %s %s",l:cmd,&shell,&shellcmdflag,shellescape(join(l:cmdline," ")))
  endif

  if a:c 
    let l:cmd = join([a:f,a:l],",") . l:cmd
  endif

  execute(l:cmd)
endfunction
command! -nargs=+ -complete=file -range=0 Wslterm call Wslterms(<count>,<line1>,<line2>,<f-args>) 

これで、:Wslterm perl %とか、’<,'>Wslterm hogehoge とかやると、bash -c をつけて簡易的に :terminalの真似ができました(^^;; おまけで、gvimのterminalの中で、WSL(ubuntu)内のvimでファイルを編集(左)とかできちゃう!w

ただ、vim自体操作は慣れてきたとはいえ、まだよく分かっていないのでこういうアプローチでいいのか、よく分かんないです。またvimスクリプトの本でも買って勉強しよ。

■補足 2018/09/24
guioptions に “!” を追加すると :shell コマンド時、コンソールウィンドウが立ち上がるのではく、gVimのウィンドウを使用するみたい。知らんかった・・・・。

:set guioptions+=!

_gvimrcに書いとくと、かなりイケてる感が味わえるかも(^^;
ちなみに僕の guioptions は・・・

"snip
guioptions=egmrL!
"snip

となっております。。。

gvim(+kaoriya) + WSL

ちょっと躓いたので、備忘録。

gvim(+Kaoriya)で特に何も設定しないと、シェルは cmd.exe が使われますよね。8.1から:terminalが使えるようになったので、とりあえず %USERPROFILE%\_gvimrc に 以下の記述をつけてシェルをWSLのbashにしました・・・。

set shell=C:\WINDOWS\System32\bash.exe

一瞬だけ自己満に浸ってしまいましたが・・・コマンドラインモードで次を実行すると・・・

:r !date

テンポラリファイルがオープンできない旨のエラーが出て撃沈。

困ったときのグーグル先生で検索するも探し方が悪いのか解決できない。基本に立ち戻り、vimのヘルプを参照(^^; ( :help options )

shell を変更する場合は、shellcmdflag,shellquote,shellxquote等も変更してね・・・ということらしい。
はじめからこちらを見てれば問題なかった・・・。
ヘルプのとおりに以下のように設定すると、問題なくでけた!

set shell=C:\WINDOWS\System32\bash.exe
set shellcmdflag=-c
set shellquote=\"
set shellxescape=
set shellxquote=

※修正:shellxquoteを空にすると perl のファイルを開く時に ftplugin/perl.vim で標準入力待ちになって帰ってこなくなったので、よくわからないけど 引用符をいれたらなんか治った・・・よくわからん。まぁいいや。
※修正の修正:shellxquoteを設定したら今度は !command が動かなくなった・・・ということで戻す・・・。該当ファイル(ftplugin/perl.vim)を見たら perlpath = system('perl -e "join ....");の部分で perlpath を設定しているみたいなので、仕方ないので _gvimrc に let g:perlpath = “ほにゃららら” とかでお茶を濁して切り抜けた。

紆余曲折がありましたが・・・:terminal のおかげで、なかなかスマートに事を為しとげることができ、いとをかし。。。

スクリプトをせっせと書きつつ、コード片を スクリプトに流し込み、動作確認、CTRL-W N で端末ノーマルモードに移行しコピって、スクリプトにペーストとかもうキーボードから手を放さず全部できちゃう!

今までのようにコンソール画面をマウスでチマチマ選択しながらコピペ・・・とかもうおさらばさ!もうWindowsはダサいとか言わせないぜ!・・・・とかいいつつ、使ってるツール、環境は全部Linux由来なんだけど・・・(^^;;; WSLのおかげで、gvimの端末からフツーのWindowsアプリも起動できるし、いうことなし。\(^o^)/。

ただ、一点惜しむらくは、:term command とすると、当然環境変数PATHからcommandを探そうとします。これを WSL の中で行わせるには、:term bash -c command とかやらないと無理っぽい。この “bash -c “っていうのはイチイチ打つのはメンドイ。しかし、初心者のおいらにはこれまた解決方法が分からず、一向に初心者からなかなか抜け出せないな・・・。

:continue
つづきは part2で