vim

vim操作方法

# 行の最後に移動しinsertモード
shift+A

# redo(やり直し)
ctrl+r

# 文頭へ移動
shift+^
 
# 行末へ移動
shift+$

# 複数行をコピー
shift+V

# 行を削除(カット)
dd

# カーソルの位置から行の最後まで削除
D

# ビジュアルモード。範囲を指定してy(ヤンク)でコピー
v

# ペースト
p

# カーソルの一行上に行を挿入しinsertモード
shift+o

# カーソルの一行下に行を挿入しinsertモード
o
 
# 半画面下へ移動する
ctrl+d

# 半画面上へ移動
ctrl+u

# 選択した行を左寄せ
Vで行選択 → :le

# 選択部分を指定した方向へインデントします。
Vで選択し、:「>」「<」
 
# n(回数)を指定し、指定した値だけインデントします。
Vで選択し、n + shift + 「>」or「<」



## vim設定ファイルの更新

.vimrc

# 行番号を表示
set number

# 括弧を入力した際に、対応する括弧を表示
set showmatch

# タイトルを表示
set title
 
# コードを色分け
syntax on
 
# タブを空白に置き換える
# インデントを4文字分に
set tabstop=4
set softtabstop=4
set shiftwidth=4
  
# スマートインデントを使用
set smartindent
set autoindent
 
# コマンドの履歴の保存数を指定する
set history=10000

# 検索ヒット時に、ヒットした部分を色づけする
set hlserach
 
# 検索に大文字を含んでいる場合、大小区別して検索する
set smartcase
 
# タブを分かりやすくする
set listchars=tab:»-,trail:-

ファイルエンコードの確認/変換

ファイルエンコード/フォーマットの種類として、”enc”, “fileencoding”, “fileformat”の3つがある。
例外として、Excel形式 “.xlsx” から “.tsv” への変換は、GoogleSpreadSheetへインポートしてから “.tsv” 形式でエクスポートを行えばよい。

文字のエンコードを確認/変更する

エンコードを確認する。

:set enc

変更する。

:set enc=utf-8
:set enc=shift_jis

ファイル自体のエンコードを調べる

エンコードを確認する。

:set fileencoding

変更する。

:set fileencoding=utf-8
:set fileencoding=shift_jis
# 短縮型:":set fenc"でも可能。

改行コード

  • unix: LF \n
  • Mac: CR \r
  • Windows: CR+LF \r\n

ファイルの改行コード(フォーマット)を確認/変更する

Windowsで作成したファイルの改行コードは”CR+LF”である。
これに対して、Linuxの改行コードは”LF”であり、ファイルの転送方法によってはWindowsで作成したテキストファイルをVimで開くと、すべての行末に”M”が表示される場合がある。

改行コードを確認する。

:set fileformat

変更する。

:set fileformat=mac
:set fileformat=dos
:set fileformat=unix
# :set ff (短縮系)

改行コードを削除し、”LF”へ変換(^M削除)する。

:%s/^M//g

“^M”は”Ctrl+V+Ctrl+M”で記述可能。

改行コードをコマンドから調べる

od -c xxx.txt | less

vimでペーストする際、インデントをコピー元ママにする

  1. setコマンド “:set paste” をタイプ、Enter。
  2. “i”を押下しInsertモードにし、”command+p”でペーストを行う。

特定の文字数をカウントする

:%s/{検索したい文字}/&/gn + Enter
10 matches on 3 lines

タブをスペースへ変換する

:set expandtab
:%retab

インデントは、タブではなくスペースを利用するようにする。

ファイルの比較をする

vimでファイルを開き、”:vsplit”に続けて編集したいファイル名を入力する。

:vsplit {比較するファイル}

:windo diffthis


ページをスクロールすると比較対象のファイルも同時にスクロールする。

以下も同様のコマンドである。

:vertical diffsplit 編集するファイル
$ vimdiff Aファイル Bファイル

“dp”と入力すると、該当箇所をマージする。

カーソルを行末から下へ、行頭から上へ自動で移動させる

デフォルトだと行末へカーソルを移動させた後、右へさらに移動させても下へは自動で移動してくれない。
以下の設定を”.vimrc”へ記述することで解消する。

set whichwrap=b,s,<,>,[,]

.vimrc

サーバ構築時、必要最低限の設定を行っておく。
~/.vimrc

syntax on
filetype on
set enc=utf-8
set fenc=utf-8
set ff=unix
set fencs=utf-8,iso-2022-jp,euc-jp,cp932
setl fenc=utf-8
setl ff=unix

" view
set ruler
set number
set title
set showcmd
set showmatch
set expandtab
set tabstop=4
set shiftwidth=4
set softtabstop=4
set autoindent
set smartindent
set cursorline
set cursorcolumn
set noswapfile
set nobackup
set expandtab
set showmatch
set backspace=2
set number

bash

更新中。

前提知識

判定ステータス

  • 終了ステータス1: 偽
  • 終了ステータス2: 真

Shebang
スクリプト冒頭に”#!”を記述、その後にファイル名を書くと、実行属性を付けてファイルを実行可能になる。
この冒頭行を”Shebang”と言う。

各種コマンド

test.confにxxxは含まれるか。

$ grep -i "xxx" 'test.conf' ; echo $?

file_Aの方が新しいか。(逆は-ot)

$ test file_A -nt file_B

入力操作

# カーソルを先頭に
{Ctrl + a}

# カーソルを行末に
{Ctro + e}

# 入力文字を全て消す
{Ctrl + u}

.bashrcと.bash_profile

サーバ構築時、必要最低限の設定を行っておく。

  • Linuxにログイン後、ホームディレクトリにある”.bash_profile”->”.bashrc”の順に実行される。
  • 既にログインしている状態で、新しくbashを起動した場合は、”.bashrc”の実行される。

~/.bash_profile

  • ログイン時に一回のみ実行される。
  • 環境変数を設定する。
# .bash_profile

# Get the aliases and functions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi

PATH=$PATH:$HOME/bin
export PATH

~/.bashrc

  • bashを立ち上げる度に実行される。
  • エイリアスを設定する。
  • CLI補完の設定をする。
  • その他シェル関数を設定する。
# .bashrc

alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias ls='ls --color'
alias l='ls -1'
alias la='ls -1A'
alias ll='ls -1alF'

# history にコマンド実行時刻を記録
HISTTIMEFORMAT='%Y-%m-%dT%T%z '

# history数を50000に指定
HISTSIZE=50000

各ユーザー共通で設定する

ユーザー作成時に以下の大元のファイルが読み込まれる為、ユーザー共通で設定したい場合は下記ファイルを編集する。

ls -la /etc/skel/
合計 20
drwxr-xr-x  2 root root 4096  8月 13 11:16 .
drwxr-xr-x 83 root root 4096  8月 29 01:38 ..
-rw-r--r--  1 root root   18  8月 16  2016 .bash_logout
-rw-r--r--  1 root root  193  8月 16  2016 .bash_profile
-rw-r--r--  1 root root  124  8月 16  2016 .bashrc

関連記事

ShellScript文法確認サイト

.zshrc

Local zsh 環境の設定

# -------------------------------------
# Variables
# -------------------------------------

export LANG=ja_JP.UTF-8

# MySQL
#export PATH="/usr/local/opt/mysql@5.5/bin:$PATH"

# Docker
export DOCKER_HOST=tcp://xxx.xxx.xx.xxx:2376
export DOCKER_TLS_VERIFY=1
export DOCKER_CERT_PATH=/Users/okamoto/.docker/machine/machines/default

# Homebrew
export PATH="/usr/local/bin:$PATH"
export PATH="/usr/local/sbin:$PATH"

# rbenv
export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"

# terraform
export PATH="$HOME/.tfenv/bin:$PATH"

# OpenSSL
export PATH=/usr/local/Cellar/openssl/1.0.2j/bin:$PATH

# PHP
#export PATH="$(brew --prefix homebrew/php/php70)/bin:$PATH"

# Python
export PATH="/usr/local/opt/python/libexec/bin:$PATH"

# virtualenv
export WORKON_HOME=$HOME/.virtualenvs
export PROJECT_HOME=$HOME/Devel
export VIRTUALENVWRAPPER_PYTHON=/usr/local/opt/python/libexec/bin/python
source /usr/local/bin/virtualenvwrapper.sh

# nodebrew
export PATH=$HOME/.nodebrew/current/bin:$PATH

# JAVA_HOME
export JAVA_HOME=`/usr/libexec/java_home -v 9`

# Go
export PATH=$PATH:/usr/local/opt/go/libexec/bin
export GOPATH=$HOME/go
export PATH=$GOPATH/bin:$PATH
export NDK_ROOT=$HOME/go/pkg/gomobile/android-ndk-r10e

# Homebrewで入れたアプリのインストール先を~/Applicationsから/Applicationsへ変更
export HOMEBREW_CASK_OPTS="--appdir=/Applications"

EDITOR=vim; export EDITOR

# -------------------------------------
# zshオプション
# -------------------------------------

# 補完機能の強化
autoload -U compinit
compinit

# コマンド間違いに"もしかして"
setopt correct

# 色をセット
setopt prompt_subst

# バックグラウンドジョブが終了したら通知
setopt no_tify

# 重複コマンドをヒストリに追加しない
setopt hist_ignore_dups

# ディレクトリ名を入力するだけでcd
setopt auto_cd

# 補完で小文字でも大文字にマッチ
zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}'

# 日本語ファイル名を表示可能に
setopt print_eight_bit

# beep を無効に
setopt no_beep

# フローコントロールを無効に
setopt no_flow_control

# sudo の後のコマンドでエイリアスを有効に
alias sudo='sudo '

# プロンプトに色を付ける
autoload -U colors; colors

# cd後、自動的にls
function chpwd() { ls -1a }


# -------------------------------------
# Alias
# -------------------------------------

alias l="ls -ulta"
alias la="ls -la"
alias l1="ls -1"
alias ll="ls -auF"
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i -v'
alias mkdir='mkdir -p'
alias history='history -1000'
alias knife="bundle exec knife"
alias gem="bundle exec gem"

# grepでヒットした文字列を強調
alias grep="grep --color"

# tree
## N: 文字化け防止 C:色をつける
alias tree="tree -NC"


# -------------------------------------
# Reserve
# -------------------------------------

# 履歴ファイル保存
export HISTFILE=${HOME}/.zsh_history

# メモリに保存する履歴件数
export HISTSIZE=100000

# 履歴ファイルに保存する履歴件数
export SAVEHIST=100000

# 重複を記録しない
setopt hist_ignore_dups

# 開始と終了を記録
setopt EXTENDED_HISTORY

# 同時に起動したzshの間でヒストリを共有する
setopt share_history

# スペースから始まるコマンド行はヒストリに残さない
setopt hist_ignore_space

# ヒストリに保存するときに余分なスペースを削除する
setopt hist_reduce_blanks

# ヒストリに実行時刻を記録
#setopt extended_history

# cdとタイプしなくても、移動
setopt AUTO_CD

# cdの履歴を保持(同一のディレクトリは重複排除)
setopt AUTO_PUSHD
setopt PUSHD_IGNORE_DUPS

# history に実行時刻を記録
export HISTTIMEFORMAT='%y/%m/%d %H:%M:%S '

# -------------------------------------
# Visual
# -------------------------------------

# Prompt
autoload -U colors; colors
PROMPT="%F{cyan}[%n@%m](%*%) %~ %# %f"

# ctrl+a とかが効くように
bindkey -e

関連記事

.bashrcと.bash_profile