プログラミングをしていてあまりにも効率が悪いと感じたので環境を一から見直した。
この記事はterminal・vim・Git・GitHubの4部構成になっている。
環境はPython2.7 + Ubuntu15.10である。
vim
現状
vimのversionは7.4.712であり、使用し始めてから1ヶ月が経過した(その前はTerapadを使用していた)。
vimtutorはいままでに3回行った。
vimで普段使うコマンドなどは以下の通り
i
挿入する(ノーマルモードから入力モードに切り替わる)vim "filename.py"
"filename"という名前のPythonのファイルを生成し、その中身をvimで編集する:wq
vimでのファイル編集を保存して終了するESC
入力モード・ビジュアルモード・コマンドラインモードの3つのモードからノーマルモードに切り替えるv
ビジュアルモードに切り替える:
コマンドラインモードに切り替えるCtrl + v
矩形ビジュアルモードgg
ファイルの先頭までカーソルを移動する*g
*行目にjumpするr
ノーマルモードで1文字だけ置換できる:%s/りんご/ばなな/g
文書全体のりんごをばななに置き換えるu
1回巻き戻しdw
ノーマルモードで1単語を削除する$
行の最後にカーソルを移動するdd
ノーマルモードで1行削除するy
ヤンク(コピー)p
ペースト
カーソル移動はhjklではなく←↓↑→を使用している
理想
- 現状ではタブを押した時に8マス移動するが2マス移動するようにしたい(現状ではインデントはスペースをちまちまうっている)
- Pythonのインデントをわかりやすく表示するようにしたい
- 複数行同時に縦に空白を挿入したい
こう直しました
1.現状ではタブを押した時に8マス移動するが2マスにしたいに関して
参考資料2によると.vimrcを編集してset tabstop=2とすればよいとのこと。しかし、そもそも.vimrcがなにかさえ知らない。
参考資料1から.vimrcはvimの設定ファイルのことで/home/ユーザー名/.vimrcにあると知った。参考資料3をみてterminalでコマンドを入力し.vimrcを編集した(以下に記す)。
これでタブを押した時に2マス移動するようになった。
haruka@ubuntu:~$ echo $HOME
/home/haruka
haruka@ubuntu:~$ cd /home/haruka
haruka@ubuntu:~$ vim .vimrc
settabstop=2"画面上でタブ文字が占める幅
2.Pythonのインデントをわかりやすく表示するようにしたいに関して
インデントを綺麗に表示する多数のvimプラグインが存在する。しかし、vimプラグインがなにかさえ知らない。
参考資料7によるとvimプラグインとはvimの機能を拡張する仕組みのことらしい。
また、参考資料4・参考資料5からdein.vimというvimプラグインを管理するvimプラグインマネージャを知り導入を試みた。しかし、.vimrcやdeinの設定中にエラーが出るようになり、導入することが出来なかった。失敗
haruka@ubuntu:~$ git clone https://github.com/Shougo/dein.vim.git \
~/.vim/dein/repos/github.com/Shougo/dein.vim
Cloning into '/home/haruka/.vim/dein/repos/github.com/Shougo/dein.vim'...
remote: Counting objects: 3227, done.
remote: Compressing objects: 100% (30/30), done.
remote: Total 3227 (delta 10), reused 0 (delta 0), pack-reused 3194
Receiving objects: 100% (3227/3227), 533.97 KiB | 227.00 KiB/s, done.
Resolving deltas: 100% (1867/1867), done.
Checking connectivity... done.
haruka@ubuntu:~$ vim .vimrc
haruka@ubuntu:~$ cd ~/.vim
haruka@ubuntu:~/.vim$ ls
dein
haruka@ubuntu:~/.vim$ vim dein
:!git clone https://github.com/Shougo/dein.vim /home/haruka/.cache/dein/repos/github.com/Shougo/dein.vim
Cloning into '/home/haruka/.cache/dein/repos/github.com/Shougo/dein.vim'...
remote: Counting objects: 3227, done.
remote: Compressing objects: 100% (30/30), done.
remote: Total 3227 (delta 10), reused 0 (delta 0), pack-reused 3194
Receiving objects: 100% (3227/3227), 533.97 KiB | 229.00 KiB/s, done.
Resolving deltas: 100% (1867/1867), done.
Checking connectivity... done.
続けるにはENTERを押すかコマンドを入力してください
[1]+ 停止 vim dein
haruka@ubuntu:~/.vim$ mkdir rc
haruka@ubuntu:~/.vim$ cd rc
haruka@ubuntu:~/.vim/rc$ vim dein.toml
/home/haruka/.vimrc の処理中にエラーが検出されました:
行 21:
E121: 未定義の変数です: g:rc_dir
E15: 無効な式です: g:rc_dir . '/dein.toml'
続けるにはENTERを押すかコマンドを入力してください
haruka@ubuntu:~$ vim .vimrc
function dein#add..dein#parse#_add..dein#parse#_init の処理中にエラーが検出されました:
行 1:
E715: 辞書型が必要です
function dein#add..dein#parse#_add..dein#parse#_init..1..2 の処理中にエラーが検出されました:
行 17:
E712: get() の引数はリスト型または辞書型でなければなりません
function dein#add..dein#parse#_add..dein#parse#_dict の処理中にエラーが検出されました:
行 6:
E712: extend() の引数はリスト型または辞書型でなければなりません
settabstop=2"画面上でタブ文字が占める幅if&compatiblesetnocompatibleendifsetruntimepath+=~/.vim/dein/repos/github.com/Shougo/dein.vimcall dein#begin(expand('~/.vim/dein'))call dein#add('Shougo/dein.vim')call dein#add('Shougo/vimproc.vim','make')call dein#add('Shougo/neocomplete.vim')call dein#add('Shougo/neomru.vim')call dein#add('Shougo/neosnippet')call dein#end()
3.複数行同時に縦に空白を挿入したいに関して
参考資料6より Ctrl + v → Shift + i → 空白(スペース) → ESC で複数行同時に縦に空白を挿入できた
理想の状態になったか
1.タブを押した時に2マス移動するという理想の状態になった
2.Pythonのインデントをわかりやすく表示するためにvimプラグインをいれたい→その前にvimプラグインマネージャを導入しよう→失敗
3.複数行同時に縦に空白を挿入できるというコマンドを覚え、理想の状態になった
参考資料
1.Vim のカスタマイズ 〜導入編〜
2.Vim のカスタマイズ 〜 タブ/インデントの設定 〜
3.Vimの設定ファイルを作る
4.NeoBundle から dein.vim に乗り換えたら爆速だった話
5.dein.vimを使ってみる
6.複数行に対して矩形選択からの挿入
7.パワーランチ(2010/04/09) Vimの話
Git
現状
CUIの操作はGitからGitHubにpushするまでの一連の動作(git init, git add "Filename", git status, git commit -m "commit comment", git log, git remote add origin "URL", git push origin master, git config --list)は知っている。ブランチは名前を聞いたことがある程度。
コマンドを何回も入力したりGitHubへpushするときにいちいちusernameとPasswordを入力するのがめんどくさくて導入をあきらめてしまった。現在はGitを使用していない。
理想
Gitを利用してファイルのバージョン管理をできるようにする。特にファイルを1つ前のバージョンにすぐ戻れるような環境に整えたい。
こう直しました
"ファイルを1つ前のバージョンにすぐ戻れるような環境" = 1つ前のコミットに戻すということらしい。参考資料1を見たがHEADとかhardとかsoftとか全然訳がわからなかったので、とりあえず使ってみた。
haruka@ubuntu:~/git$ git init
Initialized empty Git repository in /home/haruka/git/.git/
haruka@ubuntu:~/git$ vim test.txt #この時test.txtにはinunekoと文字列を書き込んだ
haruka@ubuntu:~/git$ git add "test.txt"
haruka@ubuntu:~/git$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: test.txt
haruka@ubuntu:~/git$ git commit -m "inuneko"
[master a4f6bee] inuneko
1 file changed, 1 insertion(+)
create mode 100644 test.txt
haruka@ubuntu:~/git$ vim test.txt #さきほどのinunekoと書き込んだファイルをinuと文字列を編集して保存して終了した
haruka@ubuntu:~/git$ git add "test.txt"
haruka@ubuntu:~/git$ git commit -m "inu"
[master f1f17ab] inu
1 file changed, 1 insertion(+), 1 deletion(-)
haruka@ubuntu:~/git$ git reset "test.txt" #resetして1つ前のcommitのinukekoと書き込んだファイルに戻るのかなー
haruka@ubuntu:~/git$ vim test.txt #test.txtを開くと inu と表示される 失敗
haruka@ubuntu:~/git$ git reset #オプションなしでresetしてみる
haruka@ubuntu:~/git$ vim test.txt #test.txtを開くと inu と表示される 失敗
ここで参考資料2のLeval3-6をやってみる。
haruka@ubuntu:~/git$ git log
commit f1f17abd8276d1414aaec7df0dc01567e927b0d2
Author: ___ <_@_>
Date: Sat May 21 16:47:30 2016 +0900
inu
commit a4f6bee1a5677bd2b2c1219feeb83aa4f79eea67
Author: ___ <_@_>
Date: Sat May 21 16:46:22 2016 +0900
inuneko
haruka@ubuntu:~/git$ git checkout a4f6bee1a5677bd2b2c1219feeb83aa4f79eea67 "test.txt" #inuneko時のtest.txtに戻すためinuneko時のcommitのRevisionを指定してcheckoutコマンドを入力
haruka@ubuntu:~/git$ vim test.txt #inunekoに戻った 成功
理想の状態になったか
ファイルを1つ前のバージョンにすぐ戻れるような環境に整えることはできたが、やっぱりめんどくさい。Gitを利用してファイルのバージョン管理をできるまでにはいたっていない。
参考資料
1.git-resetは結局何を戻すのか
2.yatemmma/git-lesson.md
GitHub
現状
GitからGitHubにpushするCUIの操作は一通り知っているが、現状はGitHubのホームページ(GUI)でUploadFileボタンを押しドラッグ&ドロップをしてファイルをアップロードしている。
理想
GitHubにCUIでファイルをアップロードする(push)
こう直しました
GitHubにpushするCUIの操作は一通り知っているので、それを思い出して試してみる。
haruka@ubuntu:~/newfolder$ git commit -m "newfile.py"
[master (root-commit) 703bbfc] newfile.py
1 file changed, 1 insertion(+)
create mode 100644 newfolder/newfile.py
haruka@ubuntu:~/newfolder$ git remote add origin "https://github.com/***/***"
haruka@ubuntu:~/newfolder$ git push origin master
Username for 'https://github.com': ___
Password for 'https://___@github.com':
Counting objects: 4, done.
Writing objects: 100% (4/4), 276 bytes | 0 bytes/s, done.
Total 4 (delta 0), reused 0 (delta 0)
To https://github.com/___/___
* [new branch] master -> master
GitHubでrepositoryを作成したり、どのフォルダにpushできたのかを確認するのもこれからはCUIで行っていきたい。
参考資料1によるとGitHub上の操作をCUIから行うことができるhubコマンドというのもあるらしい。
理想の状態になったか
GitHubにCUIでファイルをアップロードする(push)という理想の状態になった
参考資料
terminal
現状
現状、terminalで新しいPythonファイルを作り2回実行するまでの手順を以下に示す。
1.vim newfile.pyと入力しエンターを押す(vimでの編集に切り替わる)
2.newfile.pyをvimで編集して保存して終了コマンドを入力しエンターを押す(terminalでの編集に切り替わる)
3.python newfile.pyと入力しエンターを押し実行結果を確認する
4.↑を2回押し(vim newfile.pyと入力されている状態になる)エンターを押す(vimでの編集に切り替わる)
5.newfile.pyをvimで編集して保存して終了コマンドを入力しエンターを押す(terminalでの編集に切り替わる)
6.↑を2回押し(python newfile.pyと入力されている状態になる)エンターを押し実行結果を確認する
無駄な時間が多すぎる。この手順だとterminalかvim、どちらか片方の画面しか表示できない。
理想
ファイルの実行(terminal)と編集(vim)を1画面で表示できるようにしたい
こう直しました
参考資料1を参考に端末多重化ソフトウェアであるtmuxを導入した。
tmux導入後のterminalで新しいPythonファイルを作り2回実行するまでの手順を以下に示す。
1.tmuxと入力しエンターを押す
2.vim newfile.pyと入力しエンターを押す(vimでの編集に切り替わる)
3.newfile.pyをvimで編集して保存コマンドを入力する
4.Ctrl + b → Shift + 2 を押しペインを横分割
5.python newfile.pyと入力しエンターを押し実行結果を確認する
6.Ctrl + b → o を押しterminalからvimに移動
7.newfile.pyをvimで編集して保存コマンドを入力する
8.Ctrl + b → o を押しvimからterminalに移動
9.↑を1回押し(python newfile.pyと入力されている状態になる)エンターを押し実行結果を確認する
手順数はふえたが、ファイルの実行(terminal)と編集(vim)を1画面で表示できるようになり、実行結果をみながらファイルの編集を行えるようになった。
理想の状態になったか
ファイルの実行(terminal)と編集(vim)を1画面で表示できるようになり理想の状態になった
参考資料
感想
VimもGitもGitHubもtmuxもまだまだ慣れなくて難しい。
そんな話は置いといてすこし便利になりました( ^ω^ )