MS de:code2017 前夜祭に参加

( ´_ゝ`)ノシ

yoshitiaです。

MS de:code に参加してきました。

あれ?そろそろ一ヶ月経ちそうだ。

本記事はその前夜祭の記録です。

そろそろ記憶もあやしいのでupしよう。

 

基調講演

全身にLED貼り付けたダンサーさんがパフォーマンスしたと思ってたら

ダンサーであり技術者の方だった。

活動当初はLED500個くらいだったらしいが

今は5000個のLEDを制御してるらしい。

これは数学必要な案件ですわ。

他にはタチコマが出てきた。

特徴的な機能は

自然言語処理での応答(Siriとかそういうのと似たようなやつかな?)

・並列化機能?

 タチコマのセンサーに物体を認識・記憶させるときに

 声で物体についての情報を教えると

 ネットワークでつながっているタチコマとその情報を共有できる。

 (センサーで認識した物体の情報と教えられた物体の情報のみ)

 

将来的には数十体のロボットに並列化機能を搭載して

ロボットAIの学習時間短縮に利用されたりするんだろうなぁ。

 

 

基調講演後は3つのサブステージから興味を持った講演を聴くスタイルに。

 

サブステージ講演1

『遅咲きエンジニアのキャリアプランニング』とかそういうタイトルだったと思う

ゼロからプログラミングを始める際に選択する言語として熱いPHP推しをしていた。

なぜPHPなのかって理由は講演者の方のweb記事に書いてあります。

 

サブステージ講演2

ARでスポーツ用デバイス作成している方の開発の軌跡。

まだデバイスがごつくて普及難しいと言われたりしてるのに

それを装着してドッジボールばりに激しく動く競技作ろうとしてるそうで。

控えめに言ってマジキチです。(ほめ言葉)

 印象に残ってるのは

攻撃でARのエフェクト出すとき、

必殺技モーションで出せるようにモーション登録をして

一般テスターの方に試してもらったら

登録したモーションに合う動きができなくて

「壊れてるんじゃないですか?」って言われたのが

すごくつらかったと。

※人間はじっと座ってるときでも重心が常に動くように

体ができてるのでコンピュータに同一モーションと

判断されるレベルでの同じ動きをするのが難しい。

と言うか武術の達人が目指す境地。

同一モーションと判定する基準のさじ加減が厳しいと達人の世界になるし、

甘くしすぎると関係ない動きまで該当のモーションと判断されるという・・・。

Vimのコマンドでテキスト整形

※本記事はVimの基本操作の話です。プラグインは使用しません。

 

( ´_ゝ`)ノシ

yoshitiaです。

ブログトップ画像を変更しました。

GWにお出かけしたときのフッジサーン/(^o^)\です。

どうも桜とか富士山とかそういうのじゃないと

写真取る気起きない性分みたいです。

 

本題。 

今回はSQLのCREATE文からカラムのコメントに記述されているカラム名を取り出す、

これをVimで行う手順を書いてみようと思います。

(postgreSQL, pgAdminのSQLビューから取り出す想定)

Vimの起動・保存・入力・終了がわかっていれば理解はできるかと。

 

1. 上下の余分な行を削除

以下のsqlpostgresqlの公式ドキュメント

https://www.postgresql.jp/document/9.4/html/sql-createtable.html

から取ってきて雑にコメントを後ろに追加しただけになります。

取り出したいのはフィルム番号、タイトル...の部分です。

CREATE TABLE films (
    code        char(5), -- フィルム番号
    title       varchar(40), -- タイトル
    did         integer, -- ディストリビュータid 
    date_prod   date, -- リリース日
    kind        varchar(10), -- 種類
    len         interval hour to minute, -- リリース日からの経過時間
    CONSTRAINT code_title PRIMARY KEY(code,title)
);

 pgAdminのsqlビューだともう少し上下に余分なものがあります。

Vimで上下の余分な行を取り除くときは以下の操作を行います。

ノーマルモードで取り出したい部分の下の行に移動させて

で行頭に移動。

次に dG を押します。

dGのdは削除を指定、続くG(Shift+g)で

「カーソルからファイルの末尾まで」の範囲指定を行っています。

 

次に gg でファイル先頭にカーソル移動。

続けてdd と入力すると1行削除が実行されます。

続いて.(ドット)を取り出したい部分より上の行がなくなるまで連打します。

.(ドット)は直前に実行したノーマルモードのテキスト編集操作を繰り返します。

Vimの.(ドット)コマンドについてはwebに沢山記事があるのでweb検索すると幸せになれます。

 

必要なコメントがある行以外を抜くと次のようになります。

    code        char(5), -- フィルム番号
    title       varchar(40), -- タイトル
    did         integer, -- ディストリビュータid 
    date_prod   date, -- リリース日
    kind        varchar(10), -- 種類
    len         interval hour to minute, -- リリース日からの経過時間

 

2. コメント以外の部分を取り除く

 1の結果からコメント以外の部分(--より左側)を取り除きます。

各行のコメント開始位置がそろっていないのが面倒です。

結論から言うとexモードで置換します。

1より慣れが必要なのでこういうことがVimでできる、という紹介になります。

今はVimに限らず高機能なテキストエディタがあるので

同じ事が利用中のテキストエディタで可能か調べるのは学びがあると思います。

    code        char(5), -- フィルム番号
    title       varchar(40), -- タイトル
    did         integer, -- ディストリビュータid 
    date_prod   date, -- リリース日
    kind        varchar(10), -- 種類
    len         interval hour to minute, -- リリース日からの経過時間

各行コメントの左側は文字数等に差はありますが

「コメント部分の左側は『-- 』」なのは共通しています。

そこでノーマルモードで :%s/^.*-- //を入力後Enterで実行すると

 以下の様になります。

フィルム番号
タイトル
ディストリビュータid 
リリース日
種類
リリース日からの経過時間

コマンドの内容は

: がexモード開始、 %はexモードで「今画面で編集中のファイル」を表す記号です。sはsubstitute(置換)を表します。

%の部分を省略するとカーソルのある行が対象になります。

 /から右側は /置換対象/置換する文字列/ です。

「^.*」は正規表現なので一文字ずつ調べると幸せになれます。

 

3. まとめ

vimでテキスト編集を行うときは

編集する手順を考える→実行する

→うまくいかなければundoする→...

の繰り返しです。

テキストの編集で「どう編集するか」を

考えるのは面倒だと思います。

 ですが、ある程度繰り返していくと

編集する手順を考える時間が短くなっていきます。

コツは、無理に1回の操作でやりたいことを

片付けようとしないことです。

Vimが身についてくると

「こうしたら少ない操作でできるんじゃないか」と

思いついたり調べたりする気持ちの余裕が出てくるのでそこからが本番です。

それまではカーソル移動がhjklだけでも

文字削除にx連打でもいいんじゃないかと。

よし、Vimmerらしい記事書いたぞ。

Happy Vim Life!

javascriptでテーブル行挿入処理を雑に実装する

( ´_ゝ`)ノシ
yoshitiaです。
phpの現場が忙しく、
1年の6分の1経っても新しく記事が書けてないので凹んでます。

 

本題。

php案件と言いつつ今時は画面側の処理書く時に

javascriptはセットなわけで。

大抵は使用するwebアプリケーションフレームワーク

基本的な処理は入ってるのですが

THE・Excelなセル結合を駆使したネ申フォーマットの前には無力です。

どなたかクライアントに1レコード行あたりにtrタグ何個も使って

colspanやrowspanをフルに使う寄木細工フォーマットは

作る側も保守・運用する側も地獄ってことを

伝えていただけないでしょうか(虚空に消えていく愚痴)

 

本記事はそういうネ申フォーマットに行挿入処理を実装する時の方法です。

 

1. コピー用のレコード行を別に用意する

 trタグ1つ、つまり1行で済むなら

元からあるレコード行をcloneNode(true)して

inputタグの中身をクリアしたら一丁あがりだと思います。

もしくはタグ生成処理をして追加するかかと。

が、複数行にまたがる場合、trタグ毎に処理実装が必要になり、

html部分の変更が生じるとtrタグ毎の処理を1行ずつ確認して

修正になります。

(colspanやrowspanを使っているのでどのtrタグにあるかわかりにくい)

 

そこでcloneNode(true)用のレコード行をdisplay:noneで別に用意します。

初めから空なのでクリア処理を考える必要がなくて楽です。

phpsmartyを利用しているならレコード行部分のhtmlを1つのtplファイルに書いて

表示する部分とdisplay: noneのtableタグの中身に出力するようにすると

html部分の変更が生じてもレコード行部分のhtmlを記述したtplファイルの中を修正するだけで終わるのでメンテしやすいです。

    <table id="table_copy" style="display: none;" >
          <tr>レコード行1/2</tr>
          <tr>レコード行2/2</tr>
    </table> 

2. javascriptで1をコピーする行挿入処理を実装する

大体こんな感じの処理になると思います。

function row_insert(行挿入ボタンの要素) {

//table要素が取れるまでparentNodeを繋げる var table_tag = 行挿入ボタンの要素.parentNode.parentNode;
//tr要素が取れるまでparentNodeを繋げる
var tr_tag = 行挿入ボタンの要素.parentNode;

//コピー用のtable要素取得
var copy_table_tag = document.getElementById("copy_table");

//挿入行のインデックスを取得
var index = tr_tag.rowIndex;

//挿入行にtrタグを差し込む(1)
table_tag.insertRow(index);

//コピー用table要素から1行目をコピー(2)
var copy_tr_tag1 = copy_table_tag.rows[0].cloneNode(true);

//差し込んだtrタグに中身を格納する(3)
table_tag.rows[index].innerHTML = copy_tr_tag.innerHTML;

//2行目以降はindex+1,index+2・・・,copy_table_tag.rows[1],[2],・・・で処理を調整する }

後は必要に応じて処理を修正していけばいいかと。

3. まとめ

取りあえずこの記事書いてみましたが

この実装でもメンテ大変そうな気がするので

可能なら

レコード行をtrタグ1個の中に納めませんか?

せめてrowspan使うのやめませんか?

って確認or提案した方が幸せになれる気がします。

 

願わくばこの記事読んでる人がこういう意見・提案を

聞いてもらえるお仕事でありますように。

 

Happy Javascript life!

emacsのdefmacroメモ。

( ´_ゝ`)ノシ
yoshitiaです。

evil-modeのdefmacro読もうとした時に?となった点をメモ。

defmacroの中に入ってる良くわからないもの

(declare (indent defun))
というコードがあって
macroexpandでマクロを展開しても
出力結果がインデント調整されてるわけでもないので
かなり謎でした。

init.el読書会で解決

丁度2016/12/24のinit.el読書会で出てきたinit.elで
defmacroが出てきたので@poginさんに聞いたら即答でした。

(declare (indent defun))で調整されるもの

defmacroでマクロを定義した後、
マクロを書くタイミングで効果が出ます。
式の途中で改行を行った時のインデント方式の指定を
行っているようです。

@poginさんに出してもらった例

;; (declare (indent defun))無し
(defmacro after1 (mode &rest body)
  "`eval-after-load' MODE evaluate BODY."
  `(eval-after-load ,mode
     '(progn ,@body)))

;; (declare (indent defun))あり
(defmacro after2 (mode &rest body)
  "`eval-after-load' MODE evaluate BODY."
  (declare (indent defun))
  `(eval-after-load ,mode
     '(progn ,@body)))

上記マクロ2つを評価した後に書いたコード

;; (declare (indent defun)) なし
(after1 'dired
        (define-key dired-mode-map (kbd "M-p") 'dired-back-to-top)
        (define-key dired-mode-map (kbd "M-n") 'dired-jump-to-bottom)
        (define-key dired-mode-map (kbd "C-a") 'dired-back-to-start-of-files))

;; (declare (indent defun))あり
(after2 'dired
  (define-key dired-mode-map (kbd "M-p") 'dired-back-to-top)
  (define-key dired-mode-map (kbd "M-n") 'dired-jump-to-bottom)
  (define-key dired-mode-map (kbd "C-a") 'dired-back-to-start-of-files))

それぞれ2行目以降のインデントはemacsが自動で調整したものです。
indent後ろにdefunや1やら値を指定するとそれに応じて
マクロのインデントの方式が決まるようです。

参考:
GNU Emacs Lisp Reference Manual: Indenting Macros

evil-modeのelispをちょっと覗いてみる

本記事は Emacs Advent Calendar 2016 の5日目の記事になります。

( ´_ゝ`)ノシ
VimConf2016が終わったと思ったらこんな季節に。

ネタは何かと問われれば
Emacs with evil-mode が主戦力の Vimmer なので
evil-mode の elisp を見てみる、そういう事になった。

Spacemacsのユーザーが増えているようですが
各種elispのviキーバインド適応設定+独自設定ファイルまで
詰め込まれているのは重たすぎると思うので
当分evil-modeのままで行きます。

内容は emacs 何それ美味しいの?人向けのレベルです。
ただし、何がしかのプログラミング言語が読めないとツライです。

evilのバージョンは1.2.12です。

evil.info

ここにevilのインストール方法とか書いてある。

evil.el

ここが.emacs(init.el)で

      (add-to-list 'load-path "~/.emacs.d/evil")
      (require 'evil)

と書いて起動した時に読み込まれる部分。

evil.elのコード

;;; Code:

(require 'evil-vars)
(require 'evil-common)
(require 'evil-core)
(require 'evil-states)
(require 'evil-repeat)
(require 'evil-macros)
(require 'evil-search)
(require 'evil-ex)
(require 'evil-digraphs)
(require 'evil-types)
(require 'evil-commands)
(require 'evil-maps)
(require 'evil-integration)

(run-hooks 'evil-after-load-hook)

;;;###autoload
(define-globalized-minor-mode evil-mode
  evil-local-mode evil-initialize)

(provide 'evil)

;;; evil.el ends here

コードの説明。

require 'xxx

;はコメントアウト
(require 'evil-vars)
(provide 'evil-vars) と記述されている
evil-vars.elを読み込む。

*-hook

(run-hooks 'evil-after-load-hook)
一通りのevil-modeを構成するelispをロード後に
hookを読み込みます。
EmacsではEmacs上のイベント発生時に
ユーザーが読み込ませたい処理を仕込んでおく変数として
*-hookが用意されています。
evil-after-load-hook については
evil-vars.el 内で定義されています。
つまり、自分でelispでmode作る時は必要に応じて定義しておくものになります。

 (define-globalized-minor-mode evil-mode
  evil-local-mode evil-initialize)
モード定義

define-globalized-minor-mode で
evil-mode、evil-local-mode、evil-initialize-mode を
どのバッファでも利用できるマイナーモードとして扱うように設定します。
(evil-mode は viキーバインドを実現する elisp なのでこの扱いが丁度いい)
バッファを開く際のメジャーモードで evil-mode が不都合な場合は
そのメジャーモードの hook で evil-mode をオフにすることができます。
(メジャーモード・マイナーモード・バッファは
Emacs独自の定義があるので興味があればググッてください。)

雑に言うと開くタブ毎に evil-mode のオン・オフ切り替えの設定・操作が可能です。

evil-mode開始

これらが読み込まれた後に
.emacs(init.el)から
(evil-mode 1) を読み込むと
Emacs で evil-mode を使う準備が整います。

おまけ: <C-z>

一時的に Emacs キーバインドに戻したい場合はデフォルト設定の場合、
Emacs キーバインドに切り替え・切り戻しができます。
この場合は evil-mode をオフにしているわけではなく、
evil-emacs-state という
Emacs キーバインドのみの state に切り替えているだけです。
(vi で言うモードを Emacs のモードと区別するためevilでは
stateという名称で扱っています)

とりあえずまとめ

一番最初の evil.el だけで100行越えの記事に・・・。
最終的にはvim入門記事定番の
「起動→インサートモード→文字入力→
Esc→:qで終了」を elisp から追記していく予定です。

2017年も良い年でありますように。
Happy Vim and Emacs Life!

vimconf2016に参加した話

( ´_ゝ`)ノシ
yoshitiaです。
今年は開始時刻に間に合いました。
2年連続で開始時刻後に受付してたもので・・・

会場は 株式会社ミクシィ 様です。
mixi.co.jp

yoshitiaは vimconf2014 からの参加ですが
3年連続同じ会場となりました。
mixiさんマジ男前です。

発表のスライドと動画が公式ページにアップされるらしいので
正確な内容はそちらにおまかせして
ざっくりとした感想を。

感想

Vim7 から Vim8 へ

今回の発表で取り上げられていたポイントで大きなものは
メジャーバージョンアップで Vim7 → Vim8 になった話でした。

エンドユーザー側には直接影響のある機能追加というのはありませんが
Vim script プラグインを作成する上での追加はたくさんあります。
ざっくり言うと Vim8.0 以前より便利なプラグイン
作れるようになったということです。
.vimrc の見直しついでに新しいプラグインの探し時かもしれません。

Vim との連携で採用されるプログラミング言語

Vim と言えばコマンドラインとの連携ですが、
ここ数年の発表やそれ以外のweb記事などを見ていると
連係するプロダクトのプログラミング言語として
pythongolang が選択されていく傾向にあるようです。
特に今回は golang が絡む発表が多く、
参加者の中から ここは Vim のカンファレンス会場だよね?と言う声が
実際出ていた程です。

今後、 pythongolangVim を便利に使う上で欠かせないものと
してますます不動の地位を築くのではないか、と感じさせる Vimconf でした。

python

python は C で作るほどでもないコマンドや、
既存の *NIX コマンドに使い勝手の良い機能をちょっと足す目的、
または新しくコマンドを作る前の試作に使われるなど
Linuxに標準で入っていないと困るレベルで使われています。

golang

golang は フォーマッタ や linter 等、言語レベルで開発を助けるライブラリが
かなり充実しているため開発者からすごく評判の良い言語です。
私見ですが、個人別で宗教論争になりやすいコードの細かい文法を
できるだけ取り除こうという方針で設計されている言語のようです。

golang はコードをコンパイルして
実行ファイルを作成・使用するのが主な利用方法ですが
言語レベルで複数の OS 向けに対応した実行ファイルを作成できる
ロスコンパイルをサポートしています。

C だと複数の OS に対応する場合、OS に応じたコードを
追加する必要があります。
Vimは対応している OS が多いためそれに対応するコードも沢山あります。

完全に各 OS 対応のコードが不要かどうかまではyoshitiaの勉強不足で
わからないですが、同じものをCで書くよりはかなり楽になるようです。

Vim 以外のテキストエディタ

今回の発表者の口からでてきたテキストエディタ
yoshitiaが気になっているものは
Visual Studio Code と Atom になります。
2つのテキストエディタの共通点としては
html・cssJavascript等で作られているElectronベースであることです。

Visual Studio Code

Microsoft が提供している製品になります。
2014年以降、Windows OS の枠を超えた製品を積極的に出すようになってからの
今時のテキストエディタです。

Microsoft が提供しているだけあってMS系の言語サポート、Visual Studioのような
インテリセンス(入力補完)も可能です。
更に今時の有名どころのプログラミング言語に関するサポート機能があるようです。
(詳細は Visual Studio Code の公式ページにあります。)

yoshitiaとしては「 Microsoft が提供している」点に注目しています。
セキュリティ上の理由で開発や業務の効率化のためのツールの導入を
拒んで非効率な作業環境で従業員に生産性を求めざるを得ない企業に
新しい選択肢を提供できるツールになるんではないかと期待しています。

Atom

github 製のテキストエディタです。
Electron ベースで作成されているのですが、
ファイルのエクスプローラ、ウィンドウ分割、
コマンドパレット、ウィンドウ内での端末起動など
今まで試してきたテキストエディタの中で
扱いやすさは別格だと感じます。
キーバインドは今回の発表者の1人、 @ さんのvim-mode-plus等に
お世話になっています。

yoshitiaは今回の発表者の1人、 @ さんの言う所のスパルタンVimmer
極力デフォルトのキーバインドを崩さずに利用することを選択しています。
なので他のエディタやIDEのviエミュレートプラグインについては
「軽いテキスト編集程度の作業に支障なければそれでよし、
本腰入れたテキスト編集作業はVimでやればいいじゃない。」
と考えています。
その点、 @t9md さんのプラグインは素晴らしいです。
Vimにはない機能をAtomの特性を利用して追加してる貪欲さには震えました。)

後、直接的なポイントではありませんが
html・cssjavascriptで作られている所を注目しています。
開発者の確保がソフトウェア存続の必須要素である以上
利用している人口が多い技術を採用するのはアリではないかと。

以上の観点から Vim との使い分けで有用なテキストエディタだと見ています。

余談: Vimmer に関して

Vim を使う人に出会った事が無い方は意外かもしれませんが
VimmerVim 以外をテキストエディタとして認めないとか
他人に Vim を押し売りで使い方を教えることはありません。

yoshitia自身、emacsサクラエディタ も使います。
最近 秀丸エディタ も使ったりするようになりました。

Vim の機能やプラグイン自体、他のエディタやIDEを参考にしたものが
あるのも VimmerVim に限らず良いエディタを探し求めているだけなのです。

Vim の使い方を
メモ帳レベルの起動・入力・保存・終了
以上に教えようとする場合、
自分から Vim の help を調べたり、
とにかく実際に操作して確かめる、
それを自主的にやる人でないとどんなに優秀な Vimmer でも教えるのは困難です。
もし強引にでも教えられる方法があるならすごく聞いてみたいです。
(他のものでも同じだと思いますが)

その他

最後のLT発表者、 @ さんの発表内で
Vimプラグインで他のプラグインや組み込み機能に重複しやすい
コマンド名や関数名・変数の名付け方について
名前空間を汚すな!それはお前だけの物じゃない!」
は当日の会場に居る全員の心に響いたのではないかと
yoshitiaは思っています。

懇親会

大体 @ さんと
フロントエンドでhtml・cssメイン、補助にJavascriptを書いてるという方に
サーバがどうのと話をしていた。
あいかわらず @ さんすごすぎる。
yoshitia自身は人に話できるような実務経験があまりないので
内心「人に偉そうに話できる身分ではないんだけど」と
思いながら話をしましたが、なんらかの収穫がその方にあればいいなぁ。
(その人のtwitterアカウント聞いておけば良かったか・・・)

首都圏で開催されているJavascriptのイベントは人気過ぎて
なかなか参加定員の枠に入れない、と話されていたのは印象に残っています。

@ さんがかなり酒に酔っていたせいか
VR彼女をプレイしたいと思わないのおかしいでしょ!?と、
曇りの一点も無い本気で発言してたのすごかった。

@ さんが懇親会中で全力で Vim をdisったらしいと聞いた。
Vim の良い点・悪い点を熟知した上でのそれは
簡単には聞けない話なのですごく聞きたかった。

Vimconf X次会

レアモンスターの @ さんが Vimconf に来たので
総勢11名でカラオケボックスに。
そしておもむろにノートPCをセッティングし、
vimrc読書会 や各自のプラグイン開発、
rubyの指導をする勢、普通にカラオケする勢と混沌とする室内。
@ さん、 vimrc読書会 しながらカラオケを敢行、
それをスマホで撮影されてた。
yoshitiaは
時代とかジャンルに一貫性が無さすぎる選曲をしてたので
迷惑掛けたかもしれない。
正直すまんかった。

最後に

毎年思ってはいることですが、
ドキュメントの翻訳・Vim本体のパッチ・Vimプラグイン
いずれかで Vimコミュニティに貢献できるレベルに到達したいなぁ。

この記事を読んで頂いた Vimconf2016 の参加者の皆様へ。
今回の参加記事をまだwebにupしてないなら
「Vimconf2016に参加した。楽しかった。」だけでもいいので
記事作成をしていただけると嬉しいです。
(詳細な感想は暇な時に更新したらいいんです。)

参加者の多くが参加記事を書いていただくことで
Vimconf 2017にスポンサーが付くかもしれません。
スポンサーが付く、と言う事には本音を言うと
どうでも良いのですが
それにより、
Vim の開発者でありメンテナの Bram 氏や
国内外の著名な技術者を招待可能な体制が出来る、
これにはすごく魅力を感じます。

たった1行でOSSのコミュニティに貢献できるチャンスって中々ないですよ!

では、今後のVimconfの発展を願いつつ記事を〆ます。
Happy Vim Life!

windowsのkaoriya版gvimでvimtutorを開く話

2016/12/14追記
kaoriya版gvimでvimtutorを開くには
:Tutorialコマンドでokらしいですorz
crazymasterさん指摘ありがとうございますm(_ _)m
github.com



( ´_ゝ`)ノシ
yoshitiaです。
他人にはVim歴の方が長いのにEmacs使いと認識されてたり、
やたらExcelVBAに詳しそうと認識されてるようです。
(当人はえっそうなん?状態)

BASIC派生言語が習得しやすい言語で、
Excelが基本機能+VBA+ユーザーフォームをフルに使えば、
下手な業務システムを絶滅させられる、
そのくらいのポテンシャルを持ってるのは理解しています。

が、「VBA専門の人」と認識されると
ツール制限のキツイ環境で
VimEmacsも使えない確率が高い現場になるので
すっごく避けたいです。

・・・本題。

windowsのkaoriya版gvimでvimtutorを開く

1. <Esc>:e $VIMRUNTIME\tutor\vimtutor.ja.utf-8と入力してEnter。
上手く表示されない場合は
<Esc>:e $VIMRUNTIME\tutor\vimtutor.ja.sjisを試す。
2. <Esc>:w! TUTOCOPY
3. 一旦gvim閉じた後再開する場合は<Esc>:vi TUTOCOPY

先日yokohama.vim #8 に参加したVim初心者の方に教えておけば良かったな。

上記手順が良くわからない人向け

下記ページを保存してvimtutor.batファイルをデスクトップに作ってクリックする。

https://raw.githubusercontent.com/airblade/vim/master/vimtutor.bat

おまけ: windowsのkaoriya版Vim8の標準パッケージマネージャを利用したプラグインインストール

1. vimrcにset packpath=~/.vimと書く
2. ~.vimフォルダにpackフォルダ作ってその中にstartフォルダを作る
3. startフォルダの中にプラグインをフォルダごと置く

これで動く。便利になったなぁ。
頻繁にプラグインをインストール・アンインストールするなら
neobundleかdein.vimが楽です。