稲枝の押入れ

いなえが適当なことを書いては、しまっておく場所

Githubのプランについて

GithubがPrivateリポジトリを無料プランで使えるようにしたと発表した事について騒ぎになっていたが、そもそもプランが色々変更されているみたいなので、それぞれがどんな感じなのか自分向けの備忘録として残しておく

プランの概要

個人向け

  • Free プラン
  • Pro プラン
    • 7ドル/月
    • 旧Developerプラン
    • Freeプランと同等の機能はもちろん使える
    • privateリポジトリに参加できる共同作業者に制限がなくなる
    • 追加でツールや解析機能?等を使える
    • privateリポジトリでも以下が使える

団体向け

  • Team プラン
    • 9ドル/一人あたり月
      • 最低5人分から契約可能
      • 最初の5人分は1人あたり5ドル/月
      • 5人を超えたところから上記の額分足されていく
      • 例えば7人チームなら5*5 + 9*2 = 43ドルが毎月かかる
    • OSSのチームなら無料
    • 大体Proプランでできることはできるっぽい
    • 集団開発のための機能(マネジメントとか)がつく
  • Enterprise プラン
    • 21ドル/一人当たり月
    • 自鯖Githubを立てるという選択ができるようになる
    • 優先したサポートが受けられるとか

参考

全てのプラン

https://github.com/pricing

料金設定について詳細

https://help.github.com/articles/github-s-billing-plans/

今回のリリースについて

https://blog.github.com/2019-01-07-new-year-new-github/

個人プランについて

ここ読めば日本語で概要はわかる
GitHubが無料でプライベートリポジトリを無制限に作れるようになったぞ☆

VsVim設定備忘録

備忘録

VSの再インストールや修復、新環境でのインストールの際にVsVimで設定しておく手順を自分のために残しておく

VsVimのインストール

[ツール]->[拡張機能と更新プログラム]を開く

左カラムでオンラインを選択して右カラム上の検索窓にVimといれてEnter

検索結果が中央カラムに表示されるのでVsVimを選択して「ダウンロード」を押す

VSを落とすとVSIXインストーラーが立ち上がるのでVsVimと書いてあるのを確認して「変更」を押す

インストールが成功した旨のメッセージを確認したらVSを開く

VsVimの設定

C-[

C-[ノーマルモードに戻れるようにする

  1. [ツール]->[オプション]を開く
  2. [環境]->[キーボード]を開く
  3. 「以下の文字列を含むコマンドを表示」の欄に 「編集.選択解除」といれて、下の一覧に出てきた「編集.選択解除」を選ぶ
  4. 「ショートカットキー」の枠内で「C-[」を押す
  5. 割り当てボタンを押す

参考 : VsVimのC-[を使えるようにする

highlight

検索時のハイライトもいい感じにする

  • Highlight Incremental SearchSienna に設定

コマンド部

CUI風にする

  • Command margin Background ColorBlack に設定 (下のコマンド部の背景色が黒くなる)
  • Command margin Foreground ColorWhite に設定 (下のコマンド部の文字色が白くなる)

VSとVsVimのキーの優先度

VSのキーとVimのキーとのどちらを優先するかを設定する

デフォルトでは全てVS優先になっているのでここではVsVim優先にするかという観点で書く

VsVim優先

VsVimを優先にしておいたほうがよさそうなやつら

  • C-[ : 上記C-[の設定をしていれば設定しなくても大丈夫かも
  • C-d : 半分下に移動(down)
  • C-u : 半分上に移動(up)
  • C-n : 次に移動(next),補完
  • C-p : 前に移動(previous)
  • C-v : 矩形VisualMode

難しいやつ

  • C-r : VSのC-r,C-rのリネームとぶつかる。Vimではredo
    • redoに関してはVSのC-yを使う?
  • C-f : VSの検索とぶつかる。Vimでは画面移動
    • 画面移動は多分いらない

.vimrcの設定

VsVimvsvimrc%userprofile%\.vsvimrcにある

%userprofile%は、C:\Users\usernameのこと。エクスプローラ%userprofile%と打てばいいと思う

以下簡単な例

"検索時にハイライトする
set hlsearch 
"大文字小文字を区別しない
set ignorecase    
" エラーメッセージの表示時にビープを鳴らさない
set noerrorbells
" vim の矩形選択で文字が無くても右へ進める
set virtualedit=block    

VsVimのすゝめ (3) : Vim説明編

記事の一覧

VsVimの導入

Vimの説明に入る前に、VsVimを取り敢えず導入してみましょう。やっぱり手を動かせると実感できるからね。大丈夫、みんなやってるよ。いつでもやめられるよ。

  • まず上のメニューから[ツール]->[拡張機能と更新プログラム]を選択する
  • 左カラムでオンラインを選択する
  • 右上のVisual Stuio ギャラリーの検索の窓にvimと入力する
  • 中央のカラムにVsVimと表示されたら選択してダウンロードをおす
  • インストールの確認ウィンドウがひらくので、ライセンスを確認して内容に問題がなければインストールを押す
  • ウィンドウ右下の今すぐ再起動を押すなどしてVSを再起動する

ようこそ!!以上で君はVimの世界に足を踏み入れました。

VsVimは、VSの機能との共存の関係などで通常のVimとは少し違うところがあります。ぶっちゃけ機能に制限があったりします。というわけで、特にVsVimで使用可能なVimの機能を優先的に紹介しつつや個人的なオススメ設定も含めて後で紹介していこうと思っています。

ですがその前に、まずはVimについて簡単に説明します。

Vim

じゃあ次は神…じゃなくてVimについて紹介していきましょう。

Vimテキストエディタの一種で、とても多くのファンを持つ人気高性能エディタのうちの1つです。統合開発環境ではありませんが、デフォルトの機能に加えて、多くのプラグインが有志によって開発されているため、不便はほとんどないかと思います。ただし、VsVimではプラグインを(おそらく)使えないので、ここではプラグインの話はしません。Vimのスタンダードな機能について紹介します(いわゆる「バニラ」と呼ばれる状態で使えるものがメインです)。

モード

Vimにはモードという概念があります。そんなに難しいものではないのですが、見慣れない人の方が多いものなので最初は面食らうかもしれません。簡単に言うと、Vimには移動用モード・編集用モード・入力用モード・選択用モードといった風にモードがあり、これらを切り替えてテキストを編集します。

例を見てみましょう。

この世の至高はVisual Studio!!

と書き込まれたテキストファイルを編集して

この世の至高はVim!!

と書き換えることを考えます。最初は行頭にカーソルがあると考えます。つまり

|この世の至高はVisual Studio!!

という状態から始めます。(ここでは仮に|をカーソルとして扱います((Vimのカーソルは文字間ではなく文字上にあるのですがここでは簡単のため文字の間にカーソルがあるとして考えます)))

まず、「移動用モード」で

この世の至高は|Visual Studio!!

の位置まで移動します。

そして、「選択用モード」で

この世の至高は[Visual Studio]!!

と選択します([]で囲まれた範囲を選択範囲とします)。

そして、選択範囲を

この世の至高は|!!

と削除します(|がカーソル位置です)

そして、入力用モードにして、「Vim」と入力することで

この世の至高はVim|!!

と目的のテキストに無事書き換えられました(もちろん、以上の文章の修正は何らかの意図を含むものではありません!!!!!!!!!!!!!!!)

ノリとしてはこういう感じですが、もう少しだけ厳密に見ていきましょう

実際にはモードは

  • ノーマルモード
  • インサートモード
  • ビジュアルモード
  • コマンドラインモード

などがあります。基本的にはこの4つを使うのがほとんどなのでまずはこれを覚えておけば大丈夫です。では、これらについて見ていきましょう。

ノーマルモード

ノーマルモードはその名前の通り通常時のモードです。移動に加えて操作処理を行うことが出来ます。基本的にノーマルモードを基準に他のモードと行き来をします。

ノーマルモードでは、

  • 移動(motion)
  • 削除やペーストなどのテキスト操作処理(operator)
  • 他のモードへの移行

などが出来ます

インサートモード

インサートモードは、いわゆる通常のテキストエディタと同様に、入力をそのままファイルに書き込むモードです。Vimに慣れていない間は最悪このモードにして矢印を使って移動すれば通常のテキストエディタと同様の使い方もできます。

インサートモードでは、

などが出来ます

ビジュアルモード

ビジュアルモードは範囲選択をするモードです。基本的には、ビジュアルモード開始時の位置から、動かしたカーソルの位置までを選択範囲とします。様々な操作をすることも可能で、その場合基本的に操作は選択範囲に対して行われます

ビジュアルモードでは、

  • 移動(motion)
  • 削除やペーストなどのテキスト操作処理(選択範囲に対して)(operator)
  • ノーマルモードに戻る

などが出来ます

コマンドラインモード

コマンドラインモードはコマンドを実行できるモードです。検索や置換、その他様々な機能をコマンドによって実行できます。入力は全てコマンドラインへの入力として判断されます

コマンドラインモードでは、

などが出来ます。

モード間遷移まとめ

各モード間の遷移については、親子関係のように

という感じになっていて、各モードは自分の親もしくは子にのみ遷移できると覚えておけばいいです。よって、例えばインサートモードからビジュアルモードに変えたいときは

インサートモード->ノーマルモード->ビジュアルモード

といった感じに遷移することになります。つまり、ノーマルモードは全てのモードの拠点のような役割も持つことになります。

モード切替のキー(基本)

では実際にどうやってモードを切替えるのか、という話ですが、モード切り替えは以下のキーで行います。実は他にもあるのですが、これだけあれば困ることはないので、まずはこれを覚えましょう。(C-hogeというのはCtrlを押しながらhogeというキーを押すという意味です)

C-[については、ホームポジションから離れないためにも覚えておくと幸せです

Vimのカーソルの位置

通常のテキストエディタや、Vimの「インサートモード」時は、カーソルは文字間にあるのに対して、Vimの「ノーマルモード」時のカーソルでは文字間ではなく文字そのものにあるということを頭に入れておいてください。例えば

Vim最高

というテキストがあるとき、カーソルを行頭に移動した場合は

[V]im最高

という風にV上にカーソルがある状態になります([]がカーソルのある位置)

モード切替のキー(発展)

もしあなたがVimをこれからどんどん使っていこうと思っているとしたら(なんと素晴らしいことでしょう!マスターして是非僕に教えてください!)、モード切替キーについて、より詳細に以下も覚えると良いでしょう。これが使えるだけでも大分便利になります。

  • ノーマルモード
    • インサートモードへの切り替え
      • i : 現在位置の左側にカーソルがある状態にしてインサートモードに切り替える
      • I : その行の先頭からみて最初の(空白ではない)文字の左側にカーソルがある状態にしてインサートモードに切り替える
      • a : 現在位置の右側にカーソルがある状態にしてインサートモードに切り替える
      • A : 行末にカーソルがある状態にしてインサートモードに切り替える
      • o : 現在位置の下に行を追加してその行にカーソルがある状態にしてインサートモードに切り替える
      • O : 現在位置の上に行を追加してその行にカーソルがある状態にしてインサートモードに切り替える
      • gi : 最後に入力があった位置にカーソルがある状態にしてインサートモードに切り替える
    • ビジュアルモードへの切り替え
      • v : ビジュアルモードに切り替える
      • V : 行単位選択のビジュアルモードに切り替える
      • C-v : 矩形範囲選択のビジュアルモードに切り替える

インサートモードについて例を出すと、

上の行
適当[]文章
下の行

があった時に、それぞれのキーを押した際にインサートモードになる位置については

上の行
O
I適当i[]a文章A
o
下の行

となります

モーション(基本)

モーション(motion)とは簡単に言うと移動操作のことです。Vimではモーションを用いて移動ができます。モーションは基本的にノーマルモードとビジュアルモードでのみ使えます。

上下左右の移動

移動のためのモーションのキーは以下の通りです
h : 左
j : 下
k : 上
l : 右

一見分かりづらいかもしれませんが、これらのキーはキーボード上でhjklという順に配置されています。つまりその位置が←↓↑→という矢印キーに置き換わったように移動操作が出来ます。

そのため慣れると直感的な操作が可能になります。その位置もホームポジションからほとんど動かさずに打てる位置なので使いやすいです。

はい、これで移動のための矢印キーを押すためにホームポジションから手を離す日々とはオサラバ。常にホームポジション引きこもりの完成ですね。最高!!!

単語単位の移動

ついでに単語単位で左右に移動するモーションのキーも紹介しておきます w : 単語単位で右に移動 b : 単語単位で左に移動 e : 右側にある単語の末尾に移動 ge : 左側にある単語の末尾に移動

これはVSでいうCtrl + 左右矢印に相当します。矢印の呪縛からまた一つ解き放たれますね。

モーションの組み合わせ

モーションの前に数字をつけることでその回数分押したのと同じ動きをします。例えば

zero one two three four five six seven

の最初のzにカーソルがある時に、4回wを押すとfourfまでカーソルが動くが、4wと押した場合も同様にカーソルが動く

モーション(発展)

その他のモーションについて自分が便利だと思うものについて書いておきます。最悪覚えてなくてもそれほど不便でもないかな?他にもモーションは結構あるので気になったら調べてみてください

ここで特に断りなく順方向、逆方向と書かれていた場合、カーソル位置からみた時にそれより後ろを順方向、それより手前を逆方向として考えます。

その行の該当する文字の位置に移動する

f : 次に押した文字を、順方向に検索した場所に移動する
F : 次に押した文字を、逆方向に検索した場所に移動する
t : fの移動箇所が一文字分手前版
T : Fの移動箇所が一文字分手前版
; : 検索後、順方向に繰り返し検索
, : 検索後、逆方向に繰り返し検索

これ何気に便利。例えば

[z]ero one two three four five six seven

の先頭にカーソルがある時にfsと押すと

zero one two three four five [s]ix seven

と、カーソル位置より後ろで最初にsが出てくる位置であるsixsに移動します。

この状態で;と押すと

zero one two three four five six [s]even

と、再度fsを押したのと同じ動作をして(つまりカーソル位置より後ろで最初にsが出てくる位置に移動して)、sevensに移動します。

さらにこの状態からFoと押すと

zero one two three f[o]ur five six seven

カーソル位置より手前で最初にoが出てくるfouroに移動します。

この状態で;と押すと

zero one tw[o] three four five six seven

と、再度Foを押したのと同じ動作をして(つまりカーソル位置より手前で最初にoの出てくる位置に移動して)、twooに移動します。

ファイル内で検索する

/ : 順方向に文字列検索 ? : 逆方向に文字列検索 * : カーソルのある位置の単語を完全一致で順方向に文字列検索 # : カーソルのある位置の単語を完全一致で逆方向に文字列検索 g* : カーソルのある位置の単語を順方向に文字列検索 g# : カーソルのある位置の単語を逆方向に文字列検索 n : 検索後、順方向に繰り返し検索 N : 検索後、逆方向に繰り返し検索

VSでいうCtrl + Fに相当する。

対応する括弧に移動する

% : 対となる括弧へ移動

意外と使い勝手が良い。VSでいうCtrl + [に相当する

ただし、プリプロセッサ命令ガリガリのクソコードだったりするとテキストベースで判断してるからか正確に対応する括弧に飛ばなかったりする。クソコードを読まざるを得ないときはVSの方を使おう

今いる関数の始点/終点に移動する

[[ : 逆方向に見ていき、1桁目が{で始まる最初の位置に移動
]] : 順方向に見ていき、1桁目が{で始まる最初の位置に移動
[] : 逆方向に見ていき、1桁目が}で始まる最初の位置に移動
][ : 順方向に見ていき、1桁目が}で始まる最初の位置に移動

1文字目は「検索の方向」を指定し、2文字目は「1文字目と同じ文字なら{、1文字目と違う文字なら}を検索する」ことを指定すると覚えるといいです。

何故かチートシートとかにも書かれてないことがあったりする子。

{を最後に書く宗教の方には残念ですが、もし行頭に書くようなら、例えば関数の頭や関数の終わりに飛べるので便利。今いる関数のはじめに飛びたいときや最後に飛びたい時に使えます。

仮に{を行末に書く宗教だとしても、関数の最後に飛んで%で対応する括弧に飛べば関数の始点に飛べるので完全に使えない子ではないです

namespaceがある?はい、あきらめましょう。

これ類似する機能とかでもVSにあるのだろうか?(知らないのであったら教えてください)

ファイルの先頭/末尾に移動する

gg : ファイルの先頭に移動する
G : ファイルの末尾に移動する

行頭/行末に移動する

0 : 行頭に移動する
^ : 行頭(空白ではない文字の最初)に移動する
$ : 行末に移動する

画面単位でスクロールする

C-b : 画面分上にスクロールする
C-f : 画面分下にスクロールする
C-u : 画面半分分上にスクロールする
C-d : 画面半分分下にスクロールする

キーはback,forword,up,downで覚えると良い。画面分スクロールか画面半分分スクロールかのどちらか覚えとけば十分だと思う

オペレータ(基本)

次にオペレータを紹介します。オペレータ(operator)とは、削除やコピー、貼り付け等といった操作のことを言います。

ここを見れば取り敢えずVimを使えはするようになるはず。モーションと同じくオペレータも基本的にノーマルモードとビジュアルモードでのみ使えます。

1文字削除

x : カーソルの位置の文字を消す

ペーストするとこの時消した文字が貼り付けられるので切り取りといったほうが近い?この辺はレジスタとか調べると分かるけど多分最初は知らなくて平気。

ビジュアルモード中は選択範囲が削除されます。

削除

d : 削除する

ビジュアルモード中に押した場合はその選択範囲が削除されます。

ノーマルモード中はdの次に何を押すかによって削除できるものが決まる。例えばdの次にモーションを入力するとそのモーションによって移動した場所までを削除する。その他少し特殊でよく使うものは以下。

dd : 一行削除する
D : 行末までを削除する

このへんでVSのCtrl + XCtrl + Lは代用できる

ヤンク

y : ヤンクする

ヤンクとはまあ簡単に言うとコピーのこと。

dと同様にビジュアルモード中に押した場合はその選択範囲がヤンクされる。

ノーマルモード中もdと同様にyの次に何を押すかによって何をヤンク出来るかが決まる。d同様モーションを追記すればその範囲をヤンク出来る。またも特殊でよく使うのは以下

yy : 一行ヤンクする

ここで注意すべきなのは設定しないとヤンクされたものとコピーされてクリップボードに入っているものは別ということです。

ペースト

p : ヤンクされたものが範囲の場合はカーソルの後ろに、行の場合は下に貼り付けする
P : ヤンクされたものが範囲の場合はカーソルの前に、行の場合は上に貼り付けする

ヤンクした範囲(または切り取りや削除した範囲)を貼り付ける。クリップボードの内容が貼り付けられるわけではないので注意

やり直す

u : やり直す(undo)
C-r : やり直す(redo)

Ctrl + ZCtrl + Yと同じ。

オペレータ(発展)

最悪後は使いながらこういう機能欲しいなあと思うたびググって覚えていけば良いと思うのですが、一応おすすめのものを適当に紹介しておきます

マクロ

これはオペレータ枠でいいのか微妙にわからないけど書いておく。定型的処理に使うと便利

q : マクロの記録開始/解除
@ : マクロの実行

qを押した後アルファベット1字を押すことでその後の操作をそのアルファベットに紐づけて記憶する。記憶した操作は、@の後にそのアルファベット1字を押すことで再現できる。

例えば

void update();
void draw();
void initialize();
void finalize();

という風にあったとして、すべての行のvoidの前にvirtualを、();の間に= 0を入れたいとき(つまり純粋仮想関数にしたい時)を考える。この時、

  • updateの行でqaと押す(aにマクロを記録)
  • Iを入力(行頭に移動して入力(インサートモード)を開始)
  • virtualと入力
  • C-[を押す(ノーマルモードに切替える)
  • f;と押す(その行の;がある位置に移動する)
  • iと押す(;の前にカーソルを移動して入力を開始)
  • = 0と入力する
  • C-[を押す(ノーマルモードに切替える)
  • qを押す(マクロの記録を終了する)
  • jを押す(drawの行に移動する)
  • @aと押す(aに記録されたマクロを実行する)
  • initializefinalizeの行でもマクロを実行する

とすることで実現できます。

ちなみにVSの補完をマクロ中の入力で使った場合補完されていない実際にキーボードで打たれた文字のみが入力されてしまうので注意しましょう。上の例でvirtualと入力するところでvirまで打ってからVSの補完機能で入力を完了した場合、マクロ使用時に入力されるのはvirのみとなります。

大文字小文字の変換

~ : 大文字小文字を変換する

hoge[f]unction();

という文章があった時にこのカーソル位置のまま~を押すと

hogeF[u]nction();

となる

再度実行

. : 最後の変更を繰り返す

ちょっと癖があって難しいが、使えると強力。使い方だけ知りたいならこことか見とけばいいかな?

コマンド

ここまでコマンドラインモードでできることに触れていなかったので簡単に説明しておこうかとおもいます。

コマンドラインモードはその名前の通りコマンド入力ができるモードです。このモードの状態で特定のコマンドを入力してEnterを押すことでそのコマンドに応じた機能を使うことが出来ます。

コマンドラインモードには:で遷移するため、それぞれのコマンドには先頭に:がついて表記される事が多いです。Vimについて調べて:から始まる操作が出てきたら、それはコマンド入力なのだと思っておくと良いでしょう。

以下、簡単なコマンドについて幾らか列挙しておきます。コマンドラインモードは特にVsVimでは制約の多いところになるので、調べたものが使えないことは多々あります(例えばコマンドラインウィンドウが使えない)。ここではVsVimで使えるものだけを書いておきますが、色々試してみて、使える便利なコマンドがあったら教えてください。

ファイルを閉じる/保存

:q : ファイルを閉じる
:!q : 変更を破棄してファイルを閉じる
:w : ファイルを保存
:wq : ファイルを保存して閉じる

ファイルを閉じたい時、そのファイルに変更がある場合は、単純にファイルを保存して閉じるか、変更を破棄してファイルを閉じる必要があります。

ハイライト

:set hlsearch : 検索文字列のハイライトを表示するようにする
:set nohlsearch : 検索文字列のハイライトを表示するようにする
:noh : 検索文字列のハイライトを表示しないようにする(次回検索時からは設定準拠)。nohかそれ以上長ければnohlsearchの途中のどこで止めてもいけるっぽい

検索した時のハイライト表示のオンオフが出来る。

置換

:s/hoge/bar/ : 現在の行の行頭から見て最初のhogeという文字列をbarに置換する :%s/hoge/bar/ : ファイル内の行頭から見て最初のhogeという文字列をbarに置換する :s/hoge/bar/g : 現在の行のhogeという文字列を全てbarに置換する :%s/hoge/bar/g : ファイル内のhogeという文字列を全てbarに置換する

以上の通り、sは置換、sの前に%をつけるとファイル全体が対象になる、最後にgをつけると全てを置換するがつけないと行頭から見て最初のものだけが置換される、くらい覚えとけば取り敢えず置換を機能としては使えると思います。

実は置換正規表現が使えたりとか便利な機能が色々あったりしますそのへんは必要になり次第ググってください。

VsVim向けのオススメ設定

疲れてきたのでこのへんでVimの説明はやめてVsVimの設定について書いておこうと思います

個人の好みもあると思うので個人的なオススメだけ紹介しておきます

C-[

ノーマルモードに戻るのにEscキーを使うのではなくC-[を使いたいが、VsVimではデフォルトではC-[は使えない(もしかするとインストール言語が日本語でなければ使えるかも)。HHKB使ってるとかでなければ有効化はほぼ必須かと思います

方法は以下の通り

  1. ツール>オプションを開く
  2. 環境>キーボードを開く
  3. 「以下の文字列を含むコマンドを表示」の欄に 「編集.選択解除」といれて、下の一覧に出てきた「 編集.選択解除」を選ぶ
  4. 「ショートカットキー」の枠内で「C-[」を押す
  5. 割り当てボタンを押す

参考 : VsVimのC-[を使えるようにする

highlight

検索等した時のハイライトがデフォルトのがあまりイケてない。VsVimの設定から変えられるオススメは以下

  • Highlight Incremental Search = Sienna (検索時のハイライトもいい感じに)

コマンド部

下のコマンドモード時に使う部分がVSのテーマがDark?だったりすると浮いてて少しダサい。CUI風にするには以下のようにすればいい

  • Command margin Background Color = Black (下のコマンド部の背景色を変えたければ)
  • Command margin Foreground Color = White (下のコマンド部の文字色を変えたければ)

vsとvimどっちのキーを優先するか

VsVimではVSのキーとVimのキーとがあるためどちらを優先するかを設定できる(というかしておかないと思ったように行かない場面が多い)

デフォルトでは全てVS優先になっていると思うのでここではVsVim優先にするかという観点で書く

VsVim優先にしたやつ

VsVimを優先にしておいたほうがよさそうなやつら

  • C-[ : 上記C-[の設定をしていれば設定しなくても大丈夫かも
  • C-d : 半分下に移動(down)
  • C-u : 半分上に移動(up)
  • C-n : 次に移動(next),補完
  • C-p : 前に移動(previous)
  • C-v : 矩形VisualMode

難しいやつ

  • C-r : VSでC-r,C-rがリネーム。意外と使いたくなったりする。Vimではredo。なお、redoも使用頻度が高い
  • C-f : VSの検索のほうが右のスクロールバーに位置が表示されたりと嬉しいことがあったりもする。Vimでは画面分のスクロール

.vimrcの設定

Vimには.vimrcという設定ファイルがあって、ここに色々書くことで簡単に設定を出来る

VsVimでは%userprofile%\.vsvimrcに書くことで自動で起動時に設定してくれるらしい
%userprofile%は、C:\Users\usernameのこと。エクスプローラ%userprofile%と打てばいいと思う

以下簡単な例

"検索時にハイライトする
set hlsearch 
"大文字小文字を区別しない
set ignorecase    
" エラーメッセージの表示時にビープを鳴らさない
set noerrorbells
" vim の矩形選択で文字が無くても右へ進める
set virtualedit=block    

突然の死

なんか疲れて雑になってきたので終わりにします

参考

VsVimのすゝめ (2) : VSおさらい編

記事の一覧

注意

この記事では例えばCtrlキーとVキーとを押す場合に、VSのショートカットキーについて言及する場合はCtrl + Vといった感じで表記しますが、VimでのショートカットキーについてはC-vといった表記をします

VSの便利な機能達

VsVimの便利さを語る前にそもそもVSで元からどういう事ができるのかに触れようと思います。

機能、といいながら取り敢えずショートカットでよく使うのを列挙してみました。VSは特にデバッグ周りを簡単にできる便利機能が本当にたくさん入っているので探してみると幸せになれると思います。

ファイル移動

Ctrl + Tab

マジクソ便利。開いたファイルの履歴を持っていてくれる。履歴は使うたび更新されるので、例えば.h.cppを行き来するのも同じキーを押すだけ。楽。キーが押しやすいのも良。

Ctrlを押したままTabを複数回押すと履歴を更に遡れる。

実は開いてるウィンドウに移動したりもできるので、キーボードから手を離さず君の起こしたその素晴らしいコンパイルエラーの箇所を見に行くことも出来る。最高にクール。

左右に移動したい時に矢印とかいうダサいもの使わなくても行ければもっとクールだったのにな

宣言/定義に移動

(Ctrl +) F12
Alt + F12

言わずもがな。Altを押していると現在の位置に宣言/定義を表示できる。宣言へ移動は実はCtrl + F12らしいが特にCtrlを押さなくても宣言に移動できる

全ての参照を検索

Shift + F12

一応シンボルで検索はかけてるみたいで同じ名前の関数(例えばupdate()とか)でも、どのクラスのアップデートかとか見てくれるんだけど、絞って表示がないせいでイマイチの使い勝手の子。一応テキスト検索もしてるのでコメント欄とかも拾ってくれたりする。ソートもできないし…小規模コードだったらこれで充分

単語単位で移動

Ctrl + 左右キー

例えば

nomalEnemyGeneratedNum = nomalEnemyPreGeneratedNum + normalEnemyGeneratedNumAtThisStep;

みたいなクソコードがあった時に、左右キーで移動すると時間がかかるけど単語単位で動けば一瞬。シングルトン使った処理書いてたりすると長くなるよね、わかる(白目)

矢印とかいうゴミを使わなければ最高だった

インクルードされたファイルに移動

Ctrl + Shift + G

#include"hoge.h"hoge.hの位置にカーソルがある時に使うとhoge.h(ファイル)に移動できる。いや、F12でいけるようにしようよ

前の位置に戻る

Ctrl + -

移動系をした後に元に戻るのに便利。ちなみにShiftもおしておくと逆方向に戻れる。

現在のファイルを自動インデント

Ctrl + K , Ctrl +D

神。インデント戦争とか言う不毛なものからドロップアウトできる。Tabだろうがスペースだろうが、設定すればいいんじゃないですかね。僕はどっちでもいいのでしてません。

気になるあの子がスペース派だとわかった瞬間設定を変えてこのショートカットを全てのソースで叩く、そういう青春もあるかもしれません。ただし、ソリューションもしくはプロジェクト内に複数設定を混在させるのはやめようね。

ショートカットはキルデスで覚えるとよろしい(?)ちなみに選択範囲のみインデントしたい場合は選択してCtrl + K , Ctrl + Fケンタッキーフライドチキンとか覚えとけばいいんじゃないすかね(適当)Ctrl押しながらKDCtrl押しながらAKFと同じ。AK47とかで覚えとけばいいかもだけどKDで足る。

関数の定義を自動生成

Ctrl +. して選択肢から「関数名ファイル名の定義を作成」

これは地味に便利。hoge.hでこれを使った場合、ちゃんとhoge.cppに定義を作ってくれるしインクルードもしてくれる。厳密にどう言う判定なのかは謎。 本来はCtrl + .は確かヒントか何かを出すキーだったはずだけどこれしか使ってない

出てきた選択肢を矢印で選択しないといけないのが辛い

補完

Ctrl + Space

シンボルで補完が出るのでスコープが違う変数がかかったり、ありもしないメンバが候補に出たりは(基本的に)しない。また、候補の横のアイコンからそれが関数なのか変数なのか等もわかる。

テンプレート引数のところで使おうとするとうまく動かないのなんとかならないですかね。

関数の宣言の参照

Ctrl + Shift + Space

関数の引数を確認したり出来る。カーソル位置の引数は太文字で表示される。オーバーロードされている場合、自分で宣言を選べる。前はデフォルトは自動で検知した合致する型のオーバーロードが表示されてたけど今は自分で選ばないといけないみたい

行ごと移動

Alt + 上下キー

行ごと移動する。上に移動する時は1行上が1行下になることになる。

矢印…

リネーム

Ctrl + R, Ctrl + R

シンボル単位で名前を変えてくれる。

名前を考えるのが苦手な僕のコードは取り敢えずclass Hogevoid Fugaが暗躍跋扈する。動くようになってcommitが近づいてきたらこいつの出番。素晴らしいコードの出来上がりで今日も拙者お疲れって感じ。

純粋仮想関数周りでたまにうまくリネームされないので何度かやらないといけなかったりする。

検索

Ctrl + F Ctrl + Shift + F

まあこれはどこでも同じ。VSで特に嬉しいことがあるとすれば合致する文字列がファイルのどこにあるか右側を見るとわかる。あと選択範囲内のみで検索可能。Shiftを押すと検索結果を一覧表示できる。目grepなどが出来たり

置換

Ctrl + H

これも同じ。VS上で特段変わる事と言えば選択範囲内のみに置換を適用する事ができるとか。新しい系列のクラス作るの面倒な時は既存のをコピって範囲選択して置換したりするのは内緒。選択範囲置換、意外と使い勝手いい。

矩形選択

Alt + 選択

選択はキーボードかマウスかで。矩形選択後にそのまま入力すると複数行に変更が入るのが便利な時がある。あとこれで範囲絞って置換が使える場面も稀にある。

矢印かマウスを使わないといけないのが玉に瑕

ステップアウト/ステップイン/ステップオーバー

F10 : ステップオーバー
F11 : ステップイン
Shift + F11 : ステップアウト

簡単に使える。最強機能なのに初心者だったりすると意外と使ってない人が多い気がする。かくいう僕も先輩に教えてもらって知りました。まあ、こういうの意外と気づくタイミングないよね。

ブレークポイント

F9

楽。これとステップ実行でめっちゃデバッグ捗る

ビルド

F5

Shiftも押すとでビルドを中止できる

コード内容を適用

Alt + F10

デバッグ実行中などにコードを変更した場合に、再度ビルドしなくてもコードの変更内容を反映できる。UIとかの位置の調節とかに便利。ただし、例えば初期化などの位置を書き換えた場合に遡及的に変更が反映されるわけではないので注意。

情報を表示する

Ctrl + K, Ctrl + I

カーソルのある位置のものについて情報を表示する。変数のコメントを見たいときや赤波線の内容を確認したいときなどに便利

取り消し

Esc

大体の行動(検索窓を開くなど)を取り消して戻れる。実行後に戻すのはundo。あくまでこれは「しようかと思ったけどやっぱやーめた」とかに使う

ブックマーク

Ctrl + K, Ctrl + K : 登録/解除
Ctrl + K, Ctrl + N : 次のに移動
Ctrl + K, Ctrl + P : 前のに移動

欲しい機会があるかはわからんが、たまに3箇所以上を行き来する必要があったりするときは便利。もしくは1つだけ登録してホーム的な使い方もできる

コピー

Ctrl + C

選択しないで押すと1行をコピーできる

切り取り

Ctrl + X

何を今更と思うかもしれないけど、選択せずに使うと1行を消せるのでたまに使う

1行切り取り

Ctrl +(Shift +) L

1行切り取る。Shiftを押すとクリップボードには入らず1行削除になる。

過去のクリップボード履歴から貼り付け

Ctrl + Shift + V

Vを連打した数だけ前のやつが見れる。何気にこれ欲しいと思ってて気付いてない人いそう。

折りたたむ/展開する

Ctrl + M,Ctrl + M

コードの規模が大きくなって来たらとりあえずこれで折りたたんで全体を眺めたりする。そもそもそんな状態の時はファイルわけをしようという話だけどなかなかそれが難しい時もあるんだよね、うん

コメントアウト/アンコメント

Ctrl + K, Ctrl + C : コメントアウト
Ctrl + K, Ctrl + U : アンコメント

頻度は高くないけど便利。ストレスが減るし、気軽にコメントアウトできる。

行頭/行末,ファイルの先頭/末尾に移動する

Home : 行頭に移動する End : 行末に移動する
Ctrl + Home : ファイルの先頭移動する
Ctrl + End :ファイルの末尾に移動する

Home,Endキー意外と使わんやろ?Vim使わないなら便利やで。

画面単位で上下に移動する

PgUp
PgDown

Vimを使えない悲しい環境なら便利なので使ったほうがいい。画面単位で上下できるよ

Ctrlつけると画面内の一番上/下に移動出来るけどこれは滅多に使わん

まとめ

はい、とりあえずVSのオススメ機能を並べました。「そうそうこれ便利」みたいなのから「こんな機能あったのか」みたいなのもあったかもしれません。ちなみに全機能一覧なんかもあるから調べるといいかも。

VSの記事みたいな感じになってるけどそろそろVimについての話を始めようかと思います。

前の記事 : VsVimのすゝめ (1) : 背徳編 次の記事 : VsVimのすゝめ (3) : Vim説明編

VsVimのすゝめ (1) : 背徳編

はじめに

CCS Advent Calendar 2018

この記事はCCS Advent Calendar 2018]の9日目の記事として書かれました。他の記事も覗いてみると楽しいと思います!

前の記事 by @mattyan1053

次の記事 by マナ板

注意

本記事は普段VSを使っているけどVimもVsVimも使ったことがない人を対象として想定して書いています。

本記事内には一部過激な表現が見られるかもしれませんが、常にあなたが最大限好意的に解釈した場合に得られる内容が書いてあると思ってください。初心者なので間違いがあった場合はこっそり教えてください。

日本においては日本国憲法20条で信教の自由が認められているのであなたがどのような信仰を持っていても構いませんが、それは僕に対しても同様であることを忘れないでください。いずれにしても信仰は尊いものです。なんの話やねんと思いますが、宗教戦争を起こしたいわけじゃないので宣戦布告の類は勘弁してください

記事の構成について

なんか長々してきて見づらくなってきたので記事を複数に分けました。簡単なナンバリングとサブタイトル的なものをつけようと思ってますのでご容赦ください。

記事の一覧

Visual Studio

さて、皆さんエディタや統合開発環境は何を使っていますか?

僕は良くVisual Studio(以下VS)を使っています。個人であれば基本無料で使えますし、機能も豊富ということで使っている人が多いのではないでしょうか?

ですが、VSには弱点があります。唐突ではありますが、優秀な皆さんはもうお気付きかと思います。そう、「VSはVimではない」のです。「VSの数多ある機能をマスターすればVimに負けずとも劣らない作業効率が得られる」とおっしゃる方がいれば、私は「確かにそうかもしれない」というでしょう。かくいう私もそれなりにVSを使えるようになって来た頃にはそんなことを思いはしました。しかし、それは「Vimではない」のです。

実は僕は今までひたすらにVSを使ってきました。初めてもVSに捧げました。インストールディスクをPCに挿入する瞬間のあの情景と高鳴りは、一生僕の中に在り続けるでしょう。

一方で僕は、Vimをあえて遠ざけてさえいました。「ぼくのとうごうかいはつかんきょうがまけるわけない…っ!」と意固地になっていたのかもしれません。きっと、自分が崩れてしまうのが怖かったのです。

しかし、Vimを使う度にその思いにも疑念が湧いていくのを感じました。Vimは良いのでは?この操作性はもしかしたらVSよりも…いやそんなはずは… そしてやがて、スタンダードポジションから手を動かさずに済む悦びに咽び泣き、JKを指先で弄ぶその快感を忘れられない身体になっていきました。*1

とはいえ僕にも今から考えるとちっぽけな、けれどかつての僕にとってはとても大きな矜持がありました。引くに引けなくなっていたとも取れるかもしれません。「絶対にVimになんか負けたりしない!!」とVSを頑なに使い続けていたのですが、その脳裏にチラつくのはいつもVimでした。単語単位で移動しようと左手でCtrlを押し、右手をキーボードから少し離して矢印キーに移そうとする度に

「こんな時、アイツ(Vim)だったら手を離さなくていいよって言ってくれるのにな」

と、想ってはならない事を想ってしまうのです。しかし、背徳感とは何かを燃え上がらせるのでしょうか、僕の中のあんなにも頑なだった心は気付けば溶かされていき、「VSもVimも良いところがある、どちらが良いなんてものじゃないだろう」「そもそも環境とエディタじゃ土俵が…」などという苦しい言い訳をしながら、VSとVim、そのどちらにも身体を許す日々を続けている自分がいました。Vimには勝てなかったよ…

本命はVS、でも…そうやって簡単なテストコードはVimで書くようになってしまいました。今考えるとWandboxはキューピットだったのでしょう。彼の上で何度もVimに触れました。指先で弄ぶと悦ぶVimを見て、僕は興奮していました。

ですがそんなどっちつかずに揺れる僕の前に、魅力的な誘惑が持ち上がります。その誘惑はこう言いました
「どちらかを愛すのではなく、どちらも愛してしまえばいい」
僕は答えます
「そんなことは出来ない、わかっている、いつか選ばないといけないんだ」
それでも誘惑は甘く僕を誑かします
「君はどちらも愛しているのだろう?愛とは排他制御じゃないんだよ。どちらもtrue loveさ」
その言葉を聞いて世界が開けていくのを感じました。そうして僕はVSとVim、この2つとともに生きていくことを決めたのです。例えそこに困難が待ち受けているとしても…

飽きた

はい、飽きたので普通にやっていきます。VSにはVS上でもVimの機能を大凡使えるようにするVsVimという拡張機能があります。

追加するのは簡単ですが、その説明は後でするとして、一応VsVimの説明に入る前に、通常のVSの便利機能をおさらいしておきましょう。

次の記事 : VsVimのすゝめ (2) : VSおさらい編

*1:待って通報しないで最後まで読んだら意味分かるから

DXライブラリのアーカイブ化を楽にしたい

以前DXライブラリのパスワード付きアーカイブ機能を楽に使いたかったので適当なソフト作ったとかいう記事を書いたけど、そんな大層なことしなくてもよくね?ということに気づいたので手順をメモ。

簡単に言うとバッチファイルを作成して、それを叩けばいい状態にするだけ。

まずメモ帳を開いて

@echo off

::リソースフォルダの名前を指定
set ARCHIVED_NAME=image

::アーカイブファイルの拡張子の指定
set EXPANSION_NAME=ncs

::パスワード
set ARCHIVE_PASSWORD=password

:wait_delete_input

echo.

::入力受付
set /P INPUT_STR="%ARCHIVED_NAME%.dxa 及び %ARCHIVED_NAME%.%EXPANSION_NAME%を削除します。よろしいですか?(y/n)"

echo.

::入力に応じて分岐する
if "%INPUT_STR%"=="y" (
    echo 削除します
    del %ARCHIVED_NAME%.%EXPANSION_NAME%
    del %ARCHIVED_NAME%.dxa
) else if "%INPUT_STR%"=="n" (
    ::noの場合は何もしない
    echo アーカイブファイルを削除せずにアーカイブファイルを作成します
) else (
    echo エラー : y もしくは n を入力してください
    goto wait_delete_input
)

echo.

::パスワードを指定してアーカイブを呼び出す
echo アーカイブ化します
call C:\DxLib_VC\Tool\DXArchive\DxaEncode.exe -K:%ARCHIVE_PASSWORD% ./%ARCHIVED_NAME%

:wait_archive_input

echo.

::入力受付
set /P INPUT_STR="拡張子を.dxaから.%EXPANSION_NAME%に変更します。よろしいですか?(y/n)"

::入力に応じて分岐する
if "%INPUT_STR%"=="y" (
    ::拡張子がデフォルトでは.dxaなので、指定した拡張子に変更する
    echo 拡張子を指定したものに変更します
    ren *.dxa *.%EXPANSION_NAME% 
) else if "%INPUT_STR%"=="n" (
    rem noの場合は何もしない
) else (
    echo エラー : y もしくは n を入力してください
    goto wait_archive_input
)

echo.

::終了待ち
echo 終了しました
pause

exit /b 0

と書いてアーカイブ化したいリソースフォルダと同じ階層に置く。ちなみにimageアーカイブ化したいリソースフォルダの名前(本当はパスなので適当に変えても良い)に、ncsは自分のアーカイブファイルの拡張子に、passwordは使用したいパスワードに置換する。

そしてpass_archive.batとか適当な名前で保存する。

これで自動アーカイブバッチが作成されるので、アーカイブ化したいときにpass_archive.batをダブルクリックする。これだけ。

バッチファイルにそこそこコメントは書いておいたので適当に弄ってください。入力を待たない版は以下

@echo off

::リソースフォルダの名前を指定
set ARCHIVED_NAME=image

::アーカイブファイルの拡張子の指定
set EXPANSION_NAME=ncs

::パスワード
set ARCHIVE_PASSWORD=password

echo 削除します
del %ARCHIVED_NAME%.%EXPANSION_NAME%
del %ARCHIVED_NAME%.dxa

echo.

::パスワードを指定してアーカイブを呼び出す
echo アーカイブ化します
call C:\DxLib_VC\Tool\DXArchive\DxaEncode.exe -K:%ARCHIVE_PASSWORD% ./%ARCHIVED_NAME%

echo.

::拡張子がデフォルトでは.dxaなので、指定した拡張子に変更する
echo 拡張子を指定したものに変更します
ren *.dxa *.%EXPANSION_NAME% 

echo.

::終了待ち
echo 終了しました
pause

exit /b 0

githubへのプロジェクト追加手順メモ

前提

この記事はプロジェクトをgithubで管理したい時の手順をメモとして残すものである。 今回はプロジェクトの作成工程については全く触れない。また、流れを記しておくことに重きを置くので詳細には立ち入らない。

また、公開鍵や秘密鍵の登録等は終わらせているものとする。

工程の列挙

新規プロジェクトの場合

既存プロジェクトの場合

整理

新規プロジェクトであっても既存プロジェクトであっても、ローカルリポジトリとリモートリポジトリを作ってそれらを紐付けるという点では変わらないので、それらの手順を見ていく

作業内容

ローカルリポジトリの作成

sourceTreeなら新規/クローンを作成する->リポジトリを作成リポジトリを作りたいディレクトリを指定すれば良い。コマンドでやる場合もgit initなんかで行けるはず

リモートリポジトリの作成

今回はgithubの使用を前提としているのでログインして右上の+マークからNew Repositoryを選択してリポジトリ名を入れたりしてCreate Repositoryを押せば終わり。

リモートリポジトリの作成自体はgit initで出来るらしい(参考 : 簡単解説】Gitリポジトリの新規作成するinitコマンドの使い方)が、githubコマンドラインから新規作成出来るのかは知識不足でわからない。

ローカルリポジトリとリモートリポジトリの紐づけ

github上で作成してsetupをしていない場合、quick setupの案内が出ているのでurlをコピーする。

sourceTreeの場合は上野ツールバーリポジトリ->リポジトリ設定を選び、開いたウィンドウのリモートタブで追加を押してパスにリモートリポジトリのurlを、名前のところに管理に使うための名前を適当に入力する

pushしてみる

適当な初期commitを済ませたら(既存プロジェクトなら不要)commitしてみる

pushしたいブランチを選んでpushしてみてうまく行けば成功