rbenvでバージョンが上手く切り替わらなかった時に行ったこと(fish)

macrubyを使おうとした時につまずいたのでメモします

shellはfishです

 

状況

rbenvをbrewで入れた後、rbenvでruby 2.5.0をインストールしてグローバルに設定

$ rbenv global 2.5.0

しかしrubyのバージョンは切り替わりませんでした

 

原因

どこのrubyが呼ばれているか which コマンドで調べると

$ which ruby

/usr/bin

rbenvがインストールしたrubyが呼ばれていませんでした

$PATHを調べてみると ~/.rbenv/shims が含まれていないことが原因のようです

 

やったこと

PATHを通しました

set -U fish_user_paths ~/.rbenv/shims/ $fish_user_paths

 

参考記事

fish shellのPATH設定 - Qiita

macで<bits/stdc++.h>を使えるようにする

macOS Catalina で使えるようにする記事はこちら(2019年12月22日追記)

 

C++競プロerのみなさん,bits/stdc++.h はご存知でしょうか.

gccコンパイラで用意されているヘッダで,これをインクルードするとすべてのヘッダがインクルードされます.非常に便利です.

が,こいつをインクルードするのは非常に大変です.PC初心者はお手上げです.

競プロを初めて約半年,やっと正式にインクルードできるようになったので,ここに書きたいと思います.

 

環境

macOS Mojave (MacBook Pro 2016)

Xcode  Version 10.2 

 

今までの状況

今回設定する以前までは,Xcodeのインクルードパスが通っているディレクトリに,githubからダウンロードしたstdc++.hを突っ込んでいました.

この方法では,Xcodeが更新されるたびにstdc++.hが消えてしまいます.

 

gccのインストール

まずbrewgccをインストールします(brewがわからない人はHomebrewとググってください)

$ brew install gcc

しかしこれだけでは stdc++.hをインクルードできない可能性が大きいです.
なぜならXcodeに入っているgccが優先的に動くからです
 

gccシンボリックリンクを貼る

brewで入れたgccを使うために,コマンド検索パスの通っているディレクトリにgccシンボリックリンクを貼ります

brewで入れたパッケージは /usr/local/Cellar に保存されます.本体は .../Cellar/gcc/8.2.0/bin/g++-8とgcc-8ですので,これらのリンクを貼ります

$ ln -s /usr/local/Cellar/gcc/8.2.0/bin/g++-8 /usr/local/bin

$ ln -s /usr/local/Cellar/gcc/8.2.0/bin/gcc-8 /usr/local/bin

 

xcode-select --install を実行

自分の環境では,assert.hなどのヘッダが見つからないと怒られたので,これを実行して,ヘッダをインストールするパッケージを入れる準備をします

$ xcode-select --install

 

ヘッダをインストール

先ほど入れたCommandLineToolsの中にあるインストーラを起動します

$ open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg

インストールが終わったら完了だと思います.

競プロerにオススメのvimキーマッピング(mac)

(2019-02-10 修正) 日本語的にわかりずらい表現を修正しました.

 
こんにちは,杏にんです.今月から頑張って毎月19日に何か記事を書こうと決めました.一ヶ月で勉強したことのまとめやこれは便利だと思ったこと,趣味に関することとかを書きたいと思っています.

 

今月は競プロ界の端の端にいる競プロerの私が,競プロでvimを使っていてよかったと思ったキーマッピング(mac限定)を書きたいと思います.

 

ちなみに私は2019年1月19日現在AtcoderのGrayCoderです...(problemsではABCのC問が解ける時と解けない時があるぐらいなので,BrownCoderぐらいの実力はあると思う.コンテストに真面目に出始めたのが遅かったから(言い訳).精進します)

 

なお,vimの基本的なキーマッピングの仕方がわかっている前提で話をするので,わかっていない人は他の人の記事やvim日本語マニュアルなどをみてください.(英語が読める人は:helpを叩きましょう)

 

 

現在開いているファイルを一発でテキストエディットで開く

vimで:set numberや:set relativenumberを使用していると,command+cでコピーして提出画面で提出する時に数字までコピーしてしまい邪魔ですよね.

あれを解決する方法の一つは,テキストエディットというアプリで現在のファイルを開くことです.テキストエディットとは,mac版のメモ帳のようなものです.

.vimrcに以下のように記述します.

f:id:annin401:20190119221437p:plain

ccoにこれを割り当てているのは,個人的にccをあまり使わないからです.ccは1行削除してインサートモードに移行ですが,ぶっちゃけddとiを自然と使っちゃうので...

ちなみに<CR>でも<LF>でもどっちでも動く理由があまり理解できてないのでわかる人は教えてください(>_<)

 

現在開いているファイルを一発でコンパイルしてさらに実行する

個人的に競プロでvimを使うなら絶対した方が良いと思う設定です.ただし標準で今開いてるファイルをコンパイルして走らせるコマンドは多分ないので,つくらないといけません.ただし,これは簡単なシェルスクリプトで書くことができます.

まず以下のようなコードを書き,保存してください.

f:id:annin401:20190119224554p:plain

ファイル名はccrにしています.ccである理由は先ほど述べた理由と一緒です.なおccrじゃダサくてイヤって人はccrの部分を自分の好きなコマンド名に変えてください.

この段階では実行できません.なので実行権限を与え,実行できるようにします.

f:id:annin401:20190119225638p:plain

これで./ccrと書き,コンパイルしたいファイルを引数に与えれば動きます.

次にこのコマンドを検索パスに保存します.これは~/binがコマンド検索パスとして登録されているものとします.(デフォルトで多分設定されているはずです.)

f:id:annin401:20190119230440p:plain

これでコマンド名だけで実行できるはずです.

ここまでくれば後は簡単です..vimrcに次のキーマッピングを書き込みましょう.

f:id:annin401:20190119230655p:plain

真ん中の:!clear<CR>はエラーを見やすくするために書いています.

 

これで完成です.

f:id:annin401:20190119231249g:plain

 

Vimは魅力的なエディタ

この記事は久留米高専プロラボ部 Advent Calendar 2018 - Adventarの14日目として書かれています.

 

 

 

自己紹介

はじめまして,杏にんです.Google先生から飛んできた人はもとよりラボ部の人からも「お前誰や」となっていそうなのでちょっとだけ自己紹介します.

久留米高専1Sで,部活では一番左の机の出口側から3番目の机によく座っています.きらら民です.杏仁豆腐好きです.コミュ障なので先輩とほとんど関われてませんが,もっと関わりたいです.

 

まあ,自己紹介はこれくらいにして,本題に入りたいと思います.みなさんエディタおよびIDE何を使ってますか?.

部活で先輩たちを見ているとVSCodeだったり,競プロerの方々はCode::BlocksやNotepad++などがいらっしゃると思います.

 

私も夏休みまでVSCodeを使っていたのですが,Vimに出会い,素晴らしいエディタでしたのでこの記事で私の思うVimの良いところを書きたいと思います.

ただ私もVimを使い始めて数ヶ月で,プロから見たら「なんだこの記事は」と思うかもしれませんが,その辺は多めに見てください.

 

 

 

Vimの特徴

やっぱりVimの素晴らしいところは,マウスを全く使わずにプログラミングできることです.カーソルの移動にも矢印キーを使いません.どうやって移動するかというとキーボードを使って移動します.具体的にいうと,キーボードの’j’を押すとカーソルが下に行きます.上への移動は’k’です.

 

f:id:annin401:20181214232911p:plain

 

 

初めてこのことを知った人は,なぜ矢印キーを使わないのかと不思議に思うと思います.確かになれないうちは,カーソルの移動が難しいと感じます.

しかし,この移動に使う'j''k''h''l'のキーはタイピングでいうホームポジションの真下にあります.つまりVimはカーソルの移動をほとんど手を動かさず行うことができるのです.

f:id:annin401:20181214084145p:plain

出典元:ひよこでも出来るタイピング練習講座 | タイピング練習の「マイタイピング」

 

カーソルの移動に手を動かさなくて良くてとてもエコだと思いませんか?

 

 

モードについて

 また,「'h'や'j'キーで移動するならどうやってコードを記述するんだよ.」と思うと思います.これはVimのモードを切り替えることで記述できます.

Vimはまず”ノーマルモード”というのがあります.これは,'j'キーで下に移動など,キー一つ一つに別の役割が与えられているモードです.このノーマルモードで'i'を押すと”インサートモード”に入ることができます.

インサートモードはコードを記述するモード,つまり通常のキーボードの使い方をするモードです.

 
 

 

ノーマルモードは移動するだけのモードではありません.文字の削除や検索,など様々なことを行えます.

例えば「あ,この行の下にコードを1行追加したい.」と思った時に,普通のエディタならマウスを握って追加したい場所の上の行の行末に移動し,Enterキーを押さないといけません.

しかしVimならマウスを握らず移動し,追加したい行の上で'o'キーを押せばいいのです.

 

 

f:id:annin401:20181214202418g:plain



行の上に追加したいなら,シフトキーを押しながら'O'を押しましょう.

 

 

他にも「あ,変数追加しなきゃ」と思った時はシフト’G’ですぐにプログラムの最上段まで移動できますし,’u'で取り消し(いわゆるCtrl+Z),’y’でヤンク(コピー)’p’でペーストなど,よく使う動作を高速に行うことができます.

 

 

レジスタとは

実はデフォルトのVimクリップボードを使いません.ヤンク(コピー)したコードはレジスタと言われる場所に保存されます.

このレジスタとても多機能で,ヤンクした内容が保存されるレジスタとは別に,名前付きレジスタといい明示的に保存場所を指定して保存できる場所があります.

つまり複数のクリップボードを使うみたいなことができるのです.

他にも最近消したものを保存するレジスタもあります.

 

 

キーマッピング

キーボードで操作できると言ってもキーボードなので,ホームポジションから離れたキーは押しずらいですよね.

例えばインサートモードからノーマルモードに戻る時などに使う,非常に使用頻度の高いキーにescapeキーがあります.このキー,すごく打ちづらいです.

そう思った時はキーマッピングです.キーマッピングではあるキーを別のキーストロークに置き換えることができます.bashエイリアスのようなものです.

私はこちらの記事(vim中級者未満が捗った設定やプラグイン[gif付き] - Qiita)を参考にjjと押すだけでノーマルモードに戻れるようにしています.めっちゃくちゃ楽です.

 

 

.vimrc

Vimは細かい設定を.vimrcというファイルに書き込んで行います.本当の本当にまっすろ(真っ白)なVimは行数すら表示されていません.

.vimrcに"set number"と記述することで表示するようになります.このような調子でシンタックハイライトの設定やファイルエンコードの設定を簡単にすることができます.

 

この設定方法良いところは,"他の言語の知識がいらない”という点です.

VSCodeを悪く言うつもりはありませんが,以前(まだプログラミングを初めて間もない頃)使っていた時,まず英語のGUIにつまずき,プラグインを入れた後の設定がわからず,ググっても分かりやすい記事が見つからず,とても困ってました.

しかしVimは設定を.vimrcに書き込むだけで簡単にでき,CUIなので英語のGUIより断然分かりやすく,何よりググれば大体求めている情報にたどり着けます(記事が多い).この辺もVimが好きな理由の一つです.

 

 

その他

CUIなので簡単に自動化できる点も好きです.私はコンパイルと実行をコマンド一つでしています.競プロでは必須です.Linuxを触ったことがある人なら簡単に書けるぐらい簡単なコードです.後日上げようと思います.

 

 

まとめ

今思う私のVimの良いところを書いてきました.あれっ,全然競プロer向けの記事になってない…(この記事を書き始めた当初は競プロer向けに書くつもりでした.)

しかしVimは他のエディタとは一味も二味も違うエディタだとわかってもらえたんじゃないかと思います.

この記事で紹介した機能以外にもたくさんの機能が標準でついており,プラグインを入れればもっと快適になると思います.みなさんもVimを使ってみませんか?

 

明日はむーちょさんです.