これなら分かる!絵で見てわかるSSLサーバ証明書/中間CA証明書/ルート証明書

SSL/TLS暗号化通信、及び、SSLサーバ証明書/中間CA証明書/ルート証明書について、まとめておく。

SSL/TLS暗号化通信

暗号化通信には、「共通鍵暗号方式」が利用されます。 共通鍵暗号方式では、共通鍵をセキュアに連携する必要がありますが、この共通鍵の連携に「公開鍵暗号方式」が使われます。これがSSL/TLS暗号化通信です。

f:id:rapidre:20220328001809p:plain

SSL/TLS暗号化通信で利用される「SSLサーバ証明書」、「中間CA証明書」、「ルート証明書」、及び、SSLサーバ証明書の検証について、以下にまとめます。

SSLサーバ証明書/中間CA証明書/ルート証明書

SSL/TLS暗号化通信を行うためには、サーバに「SSLサーバ証明書」を配置しておきます。 「SSLサーバ証明書」の発行(署名)は、以下に分かれます。

  1. ルート認証局に依頼
  2. 中間認証局に依頼
  3. 自己証明書を発行

SSLサーバ証明書に署名しているのがルート認証局の場合

ルート認証局に署名をリクエストし、SSLサーバ証明書を受け取る。SSLサーバ証明書の検証では、通常ブラウザやOSにインストールされているルート証明書を用いる。

f:id:rapidre:20220315015720p:plain

SSLサーバ証明書に署名しているのが中間認証局の場合

署名のリクエスト先が中間認証局になる場合は、SSLサーバ証明書と合わせて、中間CA証明書を取得しておく。SSLサーバ証明書の検証では、通常ブラウザやOSにインストールされているルート証明書により中間CA証明書を検証し、さらに、中間CA証明書によりSSLサーバ証明書を検証することになる。

f:id:rapidre:20220315015732p:plain

自己証明書を発行する場合

いったん省略。

まとめ

SSL/TLS暗号化通信、及び、SSLサーバ証明書/中間CA証明書/ルート証明書について、分かりやすくかつ詳細に絵でまとめてみました。 誤り等、お気づきの点があれば、コメントいただけると助かります。

VScodeを使いこなそう

VScodeの拡張等、自分用のメモ

  • [未記載] プレゼン資料作り(Marp for VS Code
  • [未記載] 図表を書く(Draw.io Integration)

VSCodeの基本設定

導入Extension

Common

  • 日本語フォントを等幅にする。(BIZ UDゴシック):editor.fontFamily
  • ファイル保存時に、行末のスペース削除:files.trimTrailingWhitespace

GitHub Theme

  • ダーク系のテーマを選択:workbench.colorTheme

Material Icon Theme

  • アイコンを表示:workbench.iconTheme

Setting

setting.json

    "editor.fontFamily": "'BIZ UDゴシック', Consolas, 'Courier New', monospace",
    "files.trimTrailingWhitespace": true,
    "workbench.colorTheme": "GitHub Dark Default",
    "workbench.iconTheme": "material-icon-theme",

VScodeMarkdownを書こう

導入Extension

  • Markdown Preview Enhanced
    • 表示系や外部ツールのインターフェースに利用
  • Markdown All in One
    • ショートカット、入力補助等、Markdownの記載の利便性向上に利用

Markdown Preview Enhanced

  • Preview で利用するCSSが変更:markdown-preview-enhanced.previewTheme
  • カスタムCSSで見出しをカスタム

    • コマンドパレットでカスタマイズCSS
  • 使い方

    • プレビューする
    • 目次をつける ※プレビュー出しながら出ないと動かない?
      1. 目次の作成:markdown-preview-enhanced.createTOC
        1. <!-- @import "[TOC]" {cmd="toc" depthFrom=1 depthTo=6 orderedList=false} -->が挿入される
        2. depthFrom、depthToで見出しの深さを調整
        3. orderdListで章番号を付与。ただし、見出し側にはつかない
        4. 上書き保存すると、目次が作成される
      2. 目次除外:見出しの最後に、{ignore=true} を付与
    • htmlに変換する
    • pdfに変換する

Markdown All in One

  • プレビューを無効にする
  • 使い方
    • 目次をつける ※深さの設定が、ファイルごとにできない。見出しに章番号をつけたい場合はこちら。
      1. 目次の作成:markdown.extension.toc.create
      2. 目次の更新:上書き保存 or markdown.extension.toc.update
      3. 目次除外:見出しの最後に <!-- omit in toc --> を付与
      4. 見出しの深さ:markdown.extension.toc.levels
      5. 見出しへの章番号の付与/削除:markdown.extension.toc.addSecNumbersmarkdown.extension.toc.removeSecNumbers

Setting

setting.json

    "markdown-preview-enhanced.previewTheme": "github-light.css",

style.less

.markdown-preview.markdown-preview {
  // modify your style here
  // eg: background-color: blue;
  h1 {
    padding-bottom: .1em;
    border-bottom: 1px solid #ccc;
  }
  h1:first-letter {
    margin-right: .1em;
    font-size: 1.5em;
  }

  h2 {
    position: relative;
    padding: .25em 0 .5em .75em;
    border-left: 6px solid #3498db;
  }
  h2::after {
    position: absolute;
    left: 0;
    bottom: 0;
    content: '';
    width: 100%;
    height: 0;
    border-bottom: 1px solid #ccc;
  }

  h3 {
    background: linear-gradient(transparent 70%, #a7d6ff 70%);
  }

  h4 {
    border-bottom: solid 3px #cce4ff;
    position: relative;
  }
  h4:after {
    position: absolute;
    content: " ";
    display: block;
    border-bottom: solid 3px #5472cd;
    bottom: -3px;
    width: 20%;
  }

  h5 {
    border-bottom: solid 3px black;
  }

}

VScodeでメモを取ろう(VSNotes,Paste Image)

導入Extension

  • VSNotes
    • メモ用拡張
  • Paste Image

VSnote

  • 保存先を設定
    • [F1] -> [VSNotes:Run setup] でフォルダを指定、もしくは、"vsnotes.defaultNotePath"を直接記載
  • ファイル名を設定
    • デフォルトのまま利用
      • "vsnotes.defaultNoteTitle": "{dt}_{title}.{ext}"
      • {dt}:YYYY-MM-DD_HH-mm、{title}:<作成時に指定した名前>、{ext}:md
      • タイトルにスペースが含まれる場合は、"_"に変換
  • テンプレートを設定

    • memo用、mtg用テンプレートを作成
      • [Code]> [基本設定] > [ユーザースニペット] で、markdown.json [Markdown] を選択
      • テンプレート名をvsnote_template_memovsnote_template_mtgとする。("vsnote_template_"は固定で、以降がテンプレート名になる)
      • 作成したテンプレートを "vsnotes.templates" で設定
      • memo用をデフォルトのテンプレートに指定
  • 使い方

    1. [F1]キー=>ウィンドウ[VSNote : Create a New Note] を選択
    2. テンプレートを選択(省略した場合、デフォルトのテンプレートになる)
    3. ファイル名を入力(省略した場合、New_Noteになる)

Paste Image

  • 保存先を設定
    • デフォルトは、ファイルと同じディレクトリなので、imgフォルダ配下に変更。"pasteImage.path"
    • 一階層下げたので、パスのプレフィックスに"./"を追加。"pasteImage.prefix"
  • ファイル名を設定

    • デフォルトのファイル名は、日時だけなので、対象ファイル名をプレフィックスに追加。"pasteImage.namePrefix"
  • 使い方

    1. 貼り付けたい画像をコピー
    2. 張りたい場所に Ctrl+Alt+V

Setting

    "vsnotes.defaultNotePath": "c:\\Users\\XXXXXX\\Documents\\vsnotes",
    "vsnotes.noteTitleConvertSpaces": "_",
    "vsnotes.defaultNoteTitle": "{dt}_{title}.{ext}",
    "vsnotes.tokens": [
        {
            "type": "datetime",
            "token": "{dt}",
            "format": "YYYY-MM-DD_HH-mm",
            "description": "Insert formatted datetime."
        },
        {
            "type": "title",
            "token": "{title}",
            "description": "Insert note title from input box.",
            "format": "Untitled"
        },
        {
            "type": "extension",
            "token": "{ext}",
            "description": "Insert file vsnotes.",
            "format": "md"
        }
    ],
    "vsnotes.templates": [
        "memo",
        "mtg"
    ],
    "vsnotes.defaultSnippet": {
        "langId": "markdown",
        "name": "memo"
    },
    "pasteImage.path": "${currentFileDir}/img",
    "pasteImage.prefix": "./",
    "pasteImage.namePrefix": "${currentFileNameWithoutExt}_"
   "vsnote_template_memo": {
        "prefix": "vsnote_template_memo",
        "body": [
            "---",
            "title: $TM_FILENAME_BASE",
            "date: $CURRENT_YEAR-$CURRENT_MONTH-$CURRENT_DATE",
            "tags:",
            "\t- memo$1",
            "---",
            "",
            "# $2",
            "",
            "$3",
     ],
        "description": "Memo Template",
 },
    "vsnote_template_mtg": {
        "prefix": "vsnote_template_mtg",
        "body": [
            "---",
            "title: $TM_FILENAME_BASE",
            "date: $CURRENT_YEAR-$CURRENT_MONTH-$CURRENT_DATE",
            "tags:",
            "\t- mtg$1",
            "---",
            "",
            "# $TM_FILENAME_BASE",
            "",
            "* date&time: $CURRENT_YEAR-$CURRENT_MONTH-$CURRENT_DATE $2 - $3 @ $4",
            "* Attendees: $5",
            "",
            "## Agenda",
            "",
            "* $6",
            "",
            "## Notes",
            "",
     ],
        "description": "MTG Template",
 }

TODO管理に使おう(todotxt-mode)

導入Extension

  • todotxt-mode
    • todo.txtを便利にする

todotxt-mode

  • タスク登録用のスニペットを作る
    • [Code]> [基本設定] > [ユーザースニペット] で、plaintext [Plain Text] を選択
  • todo.txtとは
    • プレーンテキスト1ファイルでタスク管理するために整備されたフォーマット
    • x (A) YYYY-MM-DD task +project @context due:YYYY-MM-DD
      • x:完了フラグ
      • (A):優先度
      • YYYY-MM-DD:完了日
      • task:タスクの説明
      • +project:プロジェクトタグ(任意)
      • @context:コンテキストタグ(任意)
      • due:YYYY-MM-DD:期日
      • https://github.com/todotxt/todo.txt
  • 使い方
    • todo.txtファイルを作成し、vscodeで開く
    • todoを登録
      • "task" でスニペット登録しているので、 task と打てば、保管される
    • タスクが完了したら、完了日を入れて、完了フラグを立てる
      • ctrl+shift+x
    • 優先度を変える
      • 優先度を上げる:ctrl+shift+a
      • 優先度を下げる:ctrl+shift+z
    • タスクをソート
      • 期日でソート:todotxt-mode.sortByDueDate
      • プロジェクトでソート:todotxt-mode.sortByProject
      • 優先度でソート:todotxt-mode.sortByPriority
    • 完了タスクをDoneファイルに移動
      • done.txt に移動:todotxt-mode.archiveTasks
      • todo.txt に戻す:todotxt-mode.moveTasksToTodo
    • 補足情報をつける
      • todo.txt に補足情報をMarkdonwで記載する。
      • 補足情報部分を選択し、todotxt-mode.createTaskNote を実行し、補足情報を記載したMarkdonwファイルを作成
      • 補足情報をつけたいタスクに、貼り付ける

Setting

   "task": {
        "prefix": "task",
        "body": [
            "(${1:A}) ${2:task} due:${CURRENT_YEAR}-${CURRENT_MONTH}-${3:$CURRENT_DATE}"
        ]
    }

開発環境構築

Cygwinのインスト ール

isetup.exeを持ってきて、実行。 インストールパッケージは、ひとまず、デフォルトのまま。 パッケージの保存場所も適当に決める。

環境変数は以下を設定

* CYGWIN ntsec ※sambaを利用するならsmbntsecもつける、globはデフォルト有効なので不要
* HOME /home/{ユーザ名}
* MAKE_MODE UNIX
* SHELL /bin/bash

ただし、gvimを使っていると、HOMEとか書き換えられていると、もろもろ困るので、 環境変数に設定ではなく、★Cygwin.batに以下を追加する。

* set HOME=/home/%USERNAME%
* set MAKE_MODE=UNIX
* set SHELL=/bin/bash

Eclipseのインストール

pleiadesにするか、普通のやつにするか。。。
もろもろの設定負荷を考えると、pleiadesの方が効率的か。

tools.jar問題

Eclipseの「ヘルプ」→「Eclipseについて」→「インストール詳細」→「構成」タブで java.homeを確認する。 java.homeのパスが問題なければ、以下をpom.xmlに追加。

    <dependency>
        <groupId>jdk.tools</groupId>
        <artifactId>jdk.tools</artifactId>
        <version>1.7</version>
        <scope>system</scope>
        <systemPath>${java.home}/lib/tools.jar</systemPath>
    </dependency>

java.homeがおかしい場合は、eclipse.ini(Winならeclipse.exeと同じフォルダにある)に"-vm"オプションを追加します。なお"-vm"オプションは"-vmargs"の前に設定することを忘れずに。"-vmargs"以下はJVMへの引数として解釈されてしまいます。 例: ... -vm C:/Program Files/Java/jdk1.6.0_xx/bin/javaw.exe -vmargs ...

Cygwinのアンインストール

https://cygwin.com/faq/faq.html#faq.setup.uninstall-all

  1. サービス(cron,cygserver,inetd,apache,postgresql,etc.)を削除。 1.1 cygrunsrv -Lで登録しているサービスを確認。この時点で、cygrunsrvがない場合は、スキップ。 1.2 cygrunsrv --stop で停止 1.3 cygrunsrv --remove で削除

  2. X11サーバが起動している時は、停止。バッググラウンドのCygwinプログラムも停止。

  3. コマンドプロンプトも終了。

  4. 再インストール時に備え、マウントポイントを残しておきたければ、mount -mの出力をメモ。

  5. /usr/bin/cyglsa-configでcyglsa.dllをインストールしていた場合は、LSA authentication packageの使用を停止。 5.1 レジストリの/HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Lsa/Authentication Packagesの値を、元のmsv1_0に戻す。 5.2 windowsを再起動

  6. Cygwinのルートフォルダとサブフォルを全て削除。 6.1 パーミッションエラーになる場合は、Cygwinのルートフォルダからすべてをにフルコントロールをつけて、削除。 ディレクトリを右クリックし、プロパティからセキュリティタブで設定。

  7. デスクトップ、スタートメニューのショートカット削除。

  8. setup-x86{_64}.exeがインストール時に使ったダウンロードフォルダを削除

  9. 環境変数を削除。 9.1 PATHを修正 9.2 CYGWIN,HOME,MAKE_MODE,SHELLを削除

  10. レジストリから削除 10.1 HKEY_LOCAL_MACHINE\SOFTWARE\Cygwinを削除。ただし、これまでの手順を進めていれば、空のはず。 10.2 HKEY_CURRENT_USER\SOFTWARE\Cygwinを削除。ただし、これまでの手順を進めていれば、空のはず。

Windows上でのvimの環境構築

いろいろと設定を変更していると、必要なプラグインを追加した時によくわからないエラーになったりする。
そのたびに、vimを入れ直したりするのは、非常に面倒なので、vimの設定について一度、ちゃんと整理してみる。

前提/構築環境

なお、以前にvimを使っていた人は、悪さしないように、以下のファイル等々を別の場所に移しておく。あとで、必要に応じて復旧する。

  • $VIM配下
  • $HOME\_vimrc
  • $HOME\_gvimrc
  • $HOME\vimfiles配下

インストール

  1. 香り屋さんのサイトから、vimをダウンロードして、適当なディレクトリに解凍する。
  2. まずは、この時点で、状況を確認する。
    • vimを起動して、:version コマンドを実行
:version
(省略)
      システム vimrc: "$VIM\vimrc"
        ユーザ vimrc: "$HOME\_vimrc"2ユーザ vimrc: "$HOME\vimfiles\vimrc"3ユーザ vimrc: "$VIM\_vimrc"
(省略)
     システム gvimrc: "$VIM\gvimrc"
       ユーザ gvimrc: "$HOME\_gvimrc"2ユーザ gvimrc: "$HOME\vimfiles\gvimrc"3ユーザ gvimrc: "$VIM\_gvimrc"
(省略)

なお、$VIMや$HOMEがどこになっているかは、以下のコマンドで確認できる。

:echo $VIM
:echo $HOME
:echo $VIMRUNTIME

vimの設定ファイルであるvimrcは、上記の順に読み込まれ、同じパラメータに別の設定をした場合、あとに読まれるファイルで上書かれることになる。

そして、香り屋版のvimの場合、最初に読み込まれるシステムvimrcが同梱されている。つまり、香り屋版を使った場合、利用者は何も設定しなくても、このシステムvimrcの設定はされることになる。さらに、香り屋版に同梱のシステムvimrcから、設定の前に、$VIMRUNTIME/vimrc_example.vimも読み込んでいる。

したがって、香り屋版のvimをそのまま使っている場合、知らないうちに、以下のvimrcの設定が有効になっている。

(システムvimrcから読み込み): "$VIMRUNTIME\vimrc_example.vim"
             システム vimrc: "$VIM\vimrc"
            システム gvimrc: "$VIM\gvimrc"

そのため、プラグインを導入した際に、どうしてもエラー等が発生する場合には、上記の設定もちゃんと確認する必要がある。


ちなみに、香り屋版に同梱のシステムvimrcでは、このファイルの設定をskipするためのオプションが用意されている。

  • $VIM/vimrc_local.vimが存在し、変数g:vimrc_local_finishに0以外の値が設定されていれば、香り屋版に同梱のシステムvimrcをskipする。
  • $HOME/.vimrc_first.vimが存在し、変数g:vimrc_first_finishに0以外の値が設定されていれば、香り屋版に同梱のシステムvimrcをskipする。
  • 上記のどちらかのファイルに、変数g:no_vimrc_exampleに0以外の値が設定されていれば、$VIMRUNTIME/vimrc_example.vimをskipする。

この辺りは、以下の議論で追加された?
https://github.com/vim-jp/issues/issues/331
非常に複雑になっており、わかりづらい。。。


上記を理解した上で、以下の様にvimrcを使い分けるのが良いと思われる。

  • システム vimrc: "$VIM\vimrc"
    • 環境(win,mac,unixなど)依存など、全ユーザで共通な設定を記載
  • ユーザ vimrc: "$HOME\_vimrc"
    • 各ユーザが独自にカスタマイズしたいものを記載
  • 第2ユーザ vimrc: "$HOME\vimfiles\vimrc"
    • こちらも、各ユーザが独自にカスタマイズしたいものを記載
    • 個人的には、$HOME直下をあまり汚したくないので、こちらに設定する方が好み。
    • また、vimfilesディレクトリを用途ごとに複数用意して、使い分けたりもできるかも。
  • 第3ユーザ vimrc: "$VIM\_vimrc"
    • 全ユーザに必ず強いる設定を記載

neobundleをインストール

なにはなくとも、neobundleをインストールする。
基本的にhttps://github.com/Shougo/neobundle.vimに記載しているとおりにやればよい。ただし、Windowsの場合、パスが少しことなる。

  1. bundleフォルダを作成
    • $HOME\vimfiles\bundleを作成する
  2. neobundleをcloneする
  3. vimrcを作成
    • $HOME\vimfiles\vimrcを作成

2. のコマンドは以下のとおり。

> git clone https://github.com/Shougo/neobundle.vim $HOME\vimfiles\bundle\neobundle.vim

3. は以下の内容を記載。

" Note: Skip initialization for vim-tiny or vim-small.
if !1 | finish | endif

if has('vim_starting')
  set nocompatible               " Be iMproved

  " Required:
  set runtimepath+=~/vimfiles/bundle/neobundle.vim/
endif

" Required:
call neobundle#begin(expand('~/vimfiles/bundle/'))

" Let NeoBundle manage NeoBundle
" Required:
NeoBundleFetch 'Shougo/neobundle.vim'

" My Bundles here:
" Refer to |:NeoBundle-examples|.
" Note: You don't set neobundle setting in .gvimrc!

call neobundle#end()

" Required:
filetype plugin indent on

" If there are uninstalled bundles found on startup,
" this will conveniently prompt you to install them.
NeoBundleCheck

あとは、適宜必要な設定を$HOME\vimfiles\vimrcに記載する。

githubで管理しているdotfilesを使う

github上でdotfilesを管理する人が多い。そうすることで、どの環境からでも同じ設定でvimを使うことができる。
Linuxでも使うことを考慮し、vimの設定ファイルは通例に習い.vimrc、.gvimrcとしておく。ただし、windowsでは、_vimrcやvimrcというファイル名のため、リンクを張って対応する。

  1. githubレポジトリに登録
    • 登録方法については、ここでは省略する。
  2. githubレポジトリをclone
    • ここでは、$GIT\dotfiles\.vimrc、$GIT\dotfiles\.gvimrcとする
  3. リンクを張る
C:\Windows\system32>mklink %HOMEPATH%"\vimfiles\vimrc" $GIT\dotfiles\.vimrc
C:\Windows\system32>mklink %HOMEPATH%"\vimfiles\gvimrc" $GIT\dotfiles\.gvimrc

これで、ひと通りの環境構築完了。さて、エラーなく動くかな。。。

基本的なvimrcの設定について調べてみた

もろもろの諸事情により、vimを使うことになったので、基本的なvimrcの設定について調べてみた。
なお、確認環境はwindows7であり、gvim(香り屋版)とする。

ベース設定

"-------------------------------------------------------------------------------
" ベース設定
"-------------------------------------------------------------------------------
scriptencoding cp932                    " このファイルのエンコード
set nocompatible                        " vi互換しない

windows環境なので、vimrcのエンコードはcp932にしている。

エンコーディング設定

"-------------------------------------------------------------------------------
" 内部エンコーディング設定
"-------------------------------------------------------------------------------
set encoding=cp932                      " 内部エンコーディング

"-------------------------------------------------------------------------------
" エンコーディング、ファイルフォーマット設定
"-------------------------------------------------------------------------------
set fileencoding=cp932                                     " 基本文字コード
set fileencodings=iso-2022-jp,cp932,sjis,euc-jp,utf-8      " 文字コード自動判別(優先順)
set fileformat=dos                      " 基本ファイルフォーマット
set fileformats=dos,unix,mac            " ファイルフォーマット自動判別(優先順)

内部エンコーディングや、デフォルトのエンコードもcp932。
ファイルフォーマット(改行コード)は、dos(CRLF)。

システム設定

"-------------------------------------------------------------------------------
" システム設定
"-------------------------------------------------------------------------------
set nobackup                            " backupファイルを作らない
set writebackup                         " ファイルの上書きの前にbackupファイルを作る
                                        " nobackupの場合は、上書きに成功したら削除される
set backupdir=~/vimfiles/backup         " backupファイルディレクトリ
set swapfile                            " swapファイルを作る
set directory=~/vimfiles/swap           " swapファイルディレクトリ

set confirm                             " 保存されていないファイルがあるとき、終了前に保存確認
set hidden                              " 保存されていないファイルがあるときでも、保存しないで他のファイルを表示
set autoread                            " 外部でファイルに変更がされた場合は読みなおす
set browsedir=buffer                    " ファイル保存時の場所を、開いているファイルが有る場所に設定

set noerrorbells                        " エラー音抑止(gvimはgvimrcで指定)
set novisualbell                        " ビジュアルベル抑止(gvimはgvimrcで指定)
set visualbell t_vb=                    " ビープ音抑止(gvimはgvimrcで指定)

set history=100                         " コマンド、検索履歴数
set infercase                           " 補完の際の大文字小文字の区別しない
set wildmenu                            " ファイル名補完有効
set wildmode=list:longest,full          " 補完モード
  "補完モード
  " ""              最初のマッチのみを補完する。
  " "full"          次のマッチを完全に補完する。最後のマッチの次には元の文字列が使われ、その次は再び最初のマッチが補完される
  " "longest"       共通する最長の文字列までが補完される。それ以上長い文字列を補完できないときは、次の候補に移る
  " "longest:full"  "longest" と似ているが、'wildmenu' が有効ならばそれを開始する
  " "list"          複数のマッチがあるときは、全てのマッチを羅列する。
  " "list:full"     複数のマッチがあるときは、全てのマッチを羅列し、最初のマッチを補完する
  " "list:longest"  複数のマッチがあるときは、全てのマッチを羅列し、共通する最長の文字列までが補完される

set shellslash                          " Windowsで"/"を有効
set virtualedit+=block                  " 矩形選択でカーソル位置の制限を解除

念のため、swapと上書き前のbackupはとるようにしている。(まぁ、今どきいらない気もしますが。)
その他は、説明の通り。

表示設定

"-------------------------------------------------------------------------------
" 表示設定
"-------------------------------------------------------------------------------
set number                              " 行番号の表示
set ruler                               " 右下に行・列の番号を表示
set title                               " タイトル表示
set list                                " 不可視文字を表示
set listchars=eol:\|,tab:>-,trail:-,extends:>,precedes:<,nbsp:%
                                        " 不可視文字の置き換え設定
set display=uhex                        " 表示できない文字を16進数で表示

set matchpairs& matchpairs+=<:>         " 対応括弧に<と>のペアを追加
set showmatch                           " 括弧の対応表示
set matchtime=1                         " 括弧の対応表示時間[1/10秒]

set laststatus=2                        " 常にステータスラインを表示
  "ステータスライン表示モード
  " "0"  一番下のウィンドウはステータスラインを表示しない
  " "1"  ウィンドウが1つの時はステータスラインを表示しない 2つ以上ある場合は、ステータスラインを表示する
  " "2"  常にステータスラインを表示する
set cmdheight=2                         " コマンドラインの高さ (gvimはgvimrcで指定)
set showcmd                             " 入力中のコマンドをステータスラインに表示

syntax on                               " シンタックスハイライト
set cursorline                          " カーソル行をハイライト
set cursorcolumn                        " カーソル位置のカラムのハイライト
set colorcolumn=80                      " 80行目に色を付ける
colorscheme jellybeans                  " カラースキーマ(gvimはgvimrcで指定)

set scrolloff=5                         " 上下5行の視界を確保
set sidescrolloff=16                    " 左右スクロール時の視界を確保
set sidescroll=1                        " 左右スクロールは一文字づつ行う
set backspace=indent,eol,start          " バックスペースでインデントや改行を削除可能
set whichwrap=b,s,h,l,<,>,[,]           " 左右移動で行跨ぎ可能

set nowrap                              " 折り返さない
set textwidth=0                         " テキストの最大幅を無効にする

set ambiwidth=double                    " 全角記号(○、□等)の位置ズレ対応

listcharsは、適当な記号に置き換えてもいい。80行目への色付けも好みの問題。
gvimの場合は、colorschemeはgvimrcに記載する必要がある。

検索/置換設定

"-------------------------------------------------------------------------------
" 検索/置換設定
"-------------------------------------------------------------------------------
set ignorecase                          " 大/小文字無視
set smartcase                           " ただし大文字を含む検索の場合は大/小文字有効
set incsearch                           " インクリメンタルサーチ有効
set hlsearch                            " 検索結果ハイライト表示
set wrapscan                            " 検索をファイルの先頭へループする
set gdefault                            " 置換の時 g オプションをデフォルトで有効

編集設定

"-------------------------------------------------------------------------------
" 編集設定
"-------------------------------------------------------------------------------
set clipboard=unnamed,autoselect        " OSクリップボード使用、選択時自動コピー

set tabstop=2                           " タブ幅
set softtabstop=2                       " タブ幅(編集時)
set shiftwidth=2                        " インデント幅

set smarttab                            " 行頭の<Tab>は"shiftwidth"、それ以外は"tabstop"
set shiftround                          " インデントをshiftwidthの倍数に丸める
set expandtab                           " タブの代わりにスペース
set autoindent                          " 前行に合わせてインデント
set smartindent                         " 前行の末尾に合わせてインデントを増減

プラグイン設定

"-------------------------------------------------------------------------------
" ファイルタイプ設定(off)
"-------------------------------------------------------------------------------
filetype off                            " ファイルタイプの自動検出off
filetype plugin off                     " ファイルタイプ別プラグインのロードoff
filetype indent off                     " ファイルタイプ別インデントのロードoff


"-------------------------------------------------------------------------------
" ランタイムパス設定
"-------------------------------------------------------------------------------
if has('vim_starting')
  set runtimepath+=~/vimfiles/bundle/neobundle.vim/
endif


"-------------------------------------------------------------------------------
" neobundle(プラグイン管理)
"-------------------------------------------------------------------------------
call neobundle#rc(expand('~/vimfiles/bundle/'))

NeoBundle 'Shougo/neobundle.vim'
"NeoBundle 'Shougo/vimproc', {
"      \ 'build' : {
"      \     'windows' : 'make -f make_mingw32.mak',
"      \     'cygwin' : 'make -f make_cygwin.mak',
"      \     'mac' : 'make -f make_mac.mak',
"      \     'unix' : 'make -f make_unix.mak',
"      \    },
"      \ }
NeoBundle 'Shougo/unite.vim'
NeoBundle 'Shougo/vimfiler'
NeoBundle 'Shougo/vimshell'

" reST編集
NeoBundle 'Rykka/riv.vim'

" zoom in/out
NeoBundle 'thinca/vim-fontzoom'

" textハイライト
NeoBundle 'HybridText'

" vim メモ
NeoBundle 'glidenote/memolist.vim'
NeoBundle 'fuenor/qfixgrep.git'

" カッコ付け
NeoBundle 'tpope/vim-surround'
  " This is a selected text.     →S[   → This is [a selected text'.]
  " This is (a surrounded text). →ds(  → This is a surrounded text.
  " This is 'a surrounded text'. →cs'( → This is ( a surrounded text ).

" 整形
NeoBundle 'vim-scripts/Align'

" ヤンク履歴利用
NeoBundle 'vim-scripts/YankRing.vim'

" ステータスラインのハイライト
NeoBundle 'itchyny/lightline.vim'

" colorscheme
NeoBundle 'nanotech/jellybeans.vim'
NeoBundle 'altercation/vim-colors-solarized'
NeoBundle 'therubymug/vim-pyte'
NeoBundle 'w0ng/vim-hybrid'
NeoBundle 'vim-scripts/twilight'
NeoBundle 'jonathanfilip/vim-lucius'
NeoBundle 'jpo/vim-railscasts-theme'
NeoBundle 'vim-scripts/Wombat'
NeoBundle 'tomasr/molokai'
NeoBundle 'vim-scripts/rdark'

NeoBundle 'ujihisa/unite-colorscheme'


NeoBundleCheck


"-------------------------------------------------------------------------------
" ファイルタイプ設定(on)
"-------------------------------------------------------------------------------
filetype on                             " ファイルタイプの自動検出on
filetype plugin on                      " ファイルタイプ別プラグインのロードon
filetype indent on                      " ファイルタイプ別インデントのロードon

プラグインの設定を反映させるために、ファイルタイプを一旦offにして、プラグインのロード後にonにする。
プラグイン管理には、neobundleを利用。導入するプラグインは適宜読み替える。
gvim(香り屋版)は、vimprocを含んでいるので、別途インストールする必要なし。

各種プラグインの設定

"-------------------------------------------------------------------------------
" unite
"-------------------------------------------------------------------------------
let g:unite_enable_start_insert = 0     " インサートモードで開始しない
let g:unite_source_file_mru_filename_format = ''
                                        " file_mruの表示フォーマットを指定。
                                        " 空にすると表示スピードが高速化される


"-------------------------------------------------------------------------------
" vimfiler
"-------------------------------------------------------------------------------
let g:vimfiler_as_default_explorer = 1  " vimデフォルトのエクスプローラをvimfilerで置き換える
let g:vimfiler_safe_mode_by_default = 0 " セーフモードを無効にした状態で起動する


"-------------------------------------------------------------------------------
" riv(reST編集用)
"-------------------------------------------------------------------------------
let g:riv_fold_level = 0
"let g:riv_web_browser = '"C:\Program Files\Google\Chrome\Application\chrome.exe"'
let g:riv_web_browser = '"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"'
let g:riv_temp_path = 1
let g:riv_html_code_hl_style = "friendly"


"-------------------------------------------------------------------------------
" HybridText(textハイライト用)
"-------------------------------------------------------------------------------
autocm BufEnter * if &filetype == "" || &filetype == "text" | setlocal ft=hybrid | endif


"-------------------------------------------------------------------------------
" memolist(メモ管理用)
"-------------------------------------------------------------------------------
let g:memolist_memo_suffix = "txt"
let g:memolist_template_dir_path = '~/vimmemo'
let g:memolist_memo_date = "%Y-%m-%d %H:%M"
"let g:memolist_memo_date = "epoch"
"let g:memolist_memo_date = "%D %T"
"let g:memolist_prompt_tags = 1
"let g:memolist_prompt_categories = 1
let g:memolist_qfixgrep = 1
let g:memolist_vimfiler = 1
let g:memolist_vimfiler_option = "-split -winwidth=50 -simple"
"let g:memolist_unite = 1
"let g:memolist_unite_source = "file_rec"
"let g:memolist_unite_option = "-auto-preview -start-insert"
let g:memolist_path = '~/vimmemo'
"let g:memolist_filename_prefix_none = 1


"-------------------------------------------------------------------------------
" lightline(ステータスラインのハイライト)
"-------------------------------------------------------------------------------
" ステータスラインの上書くを抑止
let g:unite_force_overwrite_statusline = 0
let g:vimfiler_force_overwrite_statusline = 0

" 以下からのコピペ
" http://d.hatena.ne.jp/itchyny/20130828/1377653592
let g:lightline = {
        \ 'colorscheme': 'wombat',
        \ 'mode_map': {'c': 'NORMAL'},
        \ 'active': {
        \   'left': [ [ 'mode', 'paste' ], [ 'fugitive', 'filename' ] ]
        \ },
        \ 'component_function': {
        \   'modified': 'MyModified',
        \   'readonly': 'MyReadonly',
        \   'fugitive': 'MyFugitive',
        \   'filename': 'MyFilename',
        \   'fileformat': 'MyFileformat',
        \   'filetype': 'MyFiletype',
        \   'fileencoding': 'MyFileencoding',
        \   'mode': 'MyMode'
        \ }
        \ }

function! MyModified()
  return &ft =~ 'help\|vimfiler\|gundo' ? '' : &modified ? '+' : &modifiable ? '' : '-'
endfunction

function! MyReadonly()
  return &ft !~? 'help\|vimfiler\|gundo' && &readonly ? 'x' : ''
endfunction

function! MyFilename()
  return ('' != MyReadonly() ? MyReadonly() . ' ' : '') .
        \ (&ft == 'vimfiler' ? vimfiler#get_status_string() :
        \  &ft == 'unite' ? unite#get_status_string() :
        \  &ft == 'vimshell' ? vimshell#get_status_string() :
        \ '' != expand('%:t') ? expand('%:t') : '[No Name]') .
        \ ('' != MyModified() ? ' ' . MyModified() : '')
endfunction

function! MyFugitive()
  try
    if &ft !~? 'vimfiler\|gundo' && exists('*fugitive#head')
      return fugitive#head()
    endif
  catch
  endtry
  return ''
endfunction

function! MyFileformat()
  return winwidth(0) > 70 ? &fileformat : ''
endfunction

function! MyFiletype()
  return winwidth(0) > 70 ? (strlen(&filetype) ? &filetype : 'no ft') : ''
endfunction

function! MyFileencoding()
  return winwidth(0) > 70 ? (strlen(&fenc) ? &fenc : &enc) : ''
endfunction

function! MyMode()
  return winwidth(0) > 60 ? lightline#mode() : ''
endfunction

プラグインごとに適当に。
lightlineを利用する際の注意として、unite/vimfilerのforce_overwrite_statuslineを無効にしておかないと、unite/vimfilerを利用した際、lightlineが有効にならない。(というか、上書かれる。)
(lightline公式の導入方法とかにも、注意として書いておいてくれればいいのに。。。)

マッピング/autocmd

"-------------------------------------------------------------------------------
" Mapping
"-------------------------------------------------------------------------------
"    map:キーシーケンスを展開したあと、さらに別のマップを適用
"noremap:一度だけ展開
"-------------------------------------------------------------------------------
" コマンド         ノーマル    インサート   コマンドライン      ビジュアル
" map/noremap         @            -              -                  @
" map!/noremap!       -            @              @                  -
" nmap/nnoremap       @            -              -                  -
" imap/inoremap       -            @              -                  -
" cmap/cnoremap       -            -              @                  -
" vmap/vnoremap       -            -              -                  @
"-------------------------------------------------------------------------------


"---------------------------------------
" Prefix
nnoremap [space]  <Nop>
nmap     <Space>  [space]
xmap     <Space>  [space]

nnoremap [Window]        <Nop>
nmap     <Space>w        [Window]

nnoremap [Tag]           <Nop>
nmap     <Space>t        [Tag]

nnoremap [unite]         <Nop>
nmap     <Space>u        [unite]

nnoremap [vimfiler]      <Nop>
nmap     <Space>f        [vimfiler]


"---------------------------------------
" uniteマッピング

"現在開いているファイルのディレクトリ下のファイル一覧。
"開いていない場合はカレントディレクトリ
nnoremap <silent> [unite]f :<C-u>UniteWithBufferDir -buffer-name=files file<CR>
" バッファ一覧
nnoremap <silent> [unite]b :<C-u>Unite buffer<CR>
" レジスタ一覧
nnoremap <silent> [unite]r :<C-u>Unite -buffer-name=register register<CR>
" 最近使用したファイル一覧
nnoremap <silent> [unite]m :Unite file_mru<CR>
" ブックマーク一覧
nnoremap <silent> [unite]c :<C-u>Unite bookmark<CR>
" ブックマークに追加
nnoremap <silent> [unite]a :<C-u>UniteBookmarkAdd<CR>
augroup vimrc
  autocmd FileType unite call s:unite_my_settings()
augroup END
function! s:unite_my_settings()
  "ESCでuniteを終了
  nmap <buffer> <ESC> <Plug>(unite_exit)
  "入力モードのときjjでノーマルモードに移動
  imap <buffer> jj <Plug>(unite_insert_leave)
  "入力モードのときctrl+wでバックスラッシュも削除
  imap <buffer> <C-w> <Plug>(unite_delete_backward_path)
  "sでsplit
  nnoremap <silent><buffer><expr> s unite#smart_map('s', unite#do_action('split'))
  inoremap <silent><buffer><expr> s unite#smart_map('s', unite#do_action('split'))
  "vでvsplit
  nnoremap <silent><buffer><expr> v unite#smart_map('v', unite#do_action('vsplit'))
  inoremap <silent><buffer><expr> v unite#smart_map('v', unite#do_action('vsplit'))
  "fでvimfiler
  nnoremap <silent><buffer><expr> f unite#smart_map('f', unite#do_action('vimfiler'))
  inoremap <silent><buffer><expr> f unite#smart_map('f', unite#do_action('vimfiler'))
endfunction


"---------------------------------------
" VimFilerマッピング

"現在開いているバッファのディレクトリを開く
nnoremap <silent> [vimfiler]e :<C-u>VimFilerBufferDir -quit<CR>
"現在開いているバッファをIDE風に開く
nnoremap <silent> [vimfiler]i :<C-u>VimFilerBufferDir -split -simple -winwidth=35 -no-quit<CR>
 
"デフォルトのキーマッピングを変更
augroup vimrc
  autocmd FileType vimfiler call s:vimfiler_my_settings()
augroup END
function! s:vimfiler_my_settings()
  nmap <buffer> q <Plug>(vimfiler_exit)
  nmap <buffer> Q <Plug>(vimfiler_hide)
endfunction


"---------------------------------------
" vimrc編集/反映
nnoremap [space]v :<C-u>tabedit $MYVIMRC<CR>
nnoremap [space]g :<C-u>tabedit $MYGVIMRC<CR>
nnoremap [space]s :<C-u>source $MYVIMRC<CR>
                     \ :source $MYGVIMRC<CR>

"---------------------------------------
" 半透明
autocmd GUIEnter * set transparency=220
autocmd FocusGained * set transparency=220
autocmd FocusLost * set transparency=128

"---------------------------------------
" インサートから抜けたら、IME解除
inoremap <silent> <ESC> <ESC>:set iminsert=0<CR>

"---------------------------------------
" 全角スペース表示
function! ZenkakuSpace()
  highlight ZenkakuSpace cterm=reverse ctermfg=darkgreen gui=reverse guifg=darkgreen
endfunction
if has('syntax')
  augroup ZenkakuSpace
    autocmd!
    autocmd ColorScheme                * call ZenkakuSpace()
    autocmd VimEnter,WinEnter,BufRead  * match ZenkakuSpace / /
  augroup END
endif

"---------------------------------------
" タブページ用
" 以下のサイトからの転用
" http://qiita.com/wadako111/items/755e753677dd72d8036d
" ---
" tp : 前のタブ
" tt : 次のタブ
" t1, t2,,,t9 : 左からn番目のタブにジャンプ
" tn : 新しいタブ
" tx : タブを閉じる
" ---
" ----- 転用ここから(一部変更) -----
" Anywhere SID.
function! s:SID_PREFIX()
  return matchstr(expand('<sfile>'), '<SNR>\d\+_\zeSID_PREFIX$')
endfunction

" Set tabline.
function! s:my_tabline()  "{{{
  let s = ''
  for i in range(1, tabpagenr('$'))
    let bufnrs = tabpagebuflist(i)
    let bufnr = bufnrs[tabpagewinnr(i) - 1]  " first window, first appears
    let no = i  " display 0-origin tabpagenr.
    let mod = getbufvar(bufnr, '&modified') ? '!' : ' '
    let title = fnamemodify(bufname(bufnr), ':t')
    let title = '[' . title . ']'
    let s .= '%'.i.'T'
    let s .= '%#' . (i == tabpagenr() ? 'TabLineSel' : 'TabLine') . '#'
    let s .= no . ':' . title
    let s .= mod
    let s .= '%#TabLineFill# '
  endfor
  let s .= '%#TabLineFill#%T%=%#TabLine#'
  return s
endfunction "}}}
let &tabline = '%!'. s:SID_PREFIX() . 'my_tabline()'
set showtabline=2 " 常にタブラインを表示

" The prefix key.
"nnoremap    [Tag]   <Nop>
"nmap    t [Tag]
" Tab jump
for n in range(1, 9)
  execute 'nnoremap <silent> [Tag]'.n  ':<C-u>tabnext'.n.'<CR>'
endfor
" t1 で1番左のタブ、t2 で1番左から2番目のタブにジャンプ

map <silent> [Tag]n :tablast <bar> tabnew<CR>
" tc 新しいタブを一番右に作る
map <silent> [Tag]x :tabclose<CR>
" tx タブを閉じる
map <silent> [Tag]t :tabnext<CR>
" tn 次のタブ
map <silent> [Tag]p :tabprevious<CR>
" tp 前のタブ
" ----- 転用ここまで -----

"---------------------------------------
" window操作用
" wn  : 垂直分割(新規)
" ws  : 垂直分割(今のファイル)
" wvn : 水平分割(新規)
" wvs : 水平分割(今のファイル)
" <C-W>w : 次のウィンドウに移動
" <C-W>p : 前のウィンドウに移動
" <C-W>h : 左のウィンドウに移動
" <C-W>j : 下のウィンドウに移動
" <C-W>k : 上のウィンドウに移動
" <C-W>l : 右のウィンドウに移動
" <C-W>q : ウィンドウを閉じる

map <silent> [Window]n :new<CR>
map <silent> [Window]s :sp<CR>
map <silent> [Window]vn :vne<CR>
map <silent> [Window]vs :vs<CR>
"map <silent> [Window]w <C-W>w<CR>
"map <silent> [Window]p <C-W>p<CR>
"map <silent> [Window]h <C-W>h<CR>
"map <silent> [Window]j <C-W>j<CR>
"map <silent> [Window]k <C-W>k<CR>
"map <silent> [Window]l <C-W>l<CR>
"map <silent> [Window]x <C-W>q<CR>

nnoremap <silent> <S-Left>  <C-w>h<CR>
nnoremap <silent> <S-Down>  <C-w>j<CR>
nnoremap <silent> <S-Up>    <C-w>k<CR>
nnoremap <silent> <S-Right> <C-w>l<CR>

ここが、vimで自分らしさを発揮するところ。
上記は、個人的に役立ちそうなものを設定している。
vim初心者は、とりあえずvimrc編集/反映のマッピングだけ設定しておいて、あとは、必要になった段階で試考錯誤しながら、自分で追加するのが良いのではないでしょうか。

まとめ

よければ、ご参考までに。
認識が誤っている箇所、もっと良い方法があれば、コメントいただけると幸いです。

vimrc初心者向け(本人が初心者のため)

もろもろのサイトから集めた情報で作ってみたvimrc(Windows用)。
必要最低限にしておいて、あとは、適宜、修正する。

おすすめ!というわけではないが、これくらい設定しておけば、とりあえず、困らないと思われる。

あ、rivはreST編集用なので、不要なら外す。

scriptencoding cp932                    " このファイルのエンコード
set nocompatible                        " vi互換しない



"-------------------------------------------------------------------------------
" ファイルタイプ設定(off)
"-------------------------------------------------------------------------------
filetype off                            " ファイルタイプの自動検出off
filetype plugin off                     " ファイルタイプ別プラグインのロードoff
filetype indent off                     " ファイルタイプ別インデントのロードoff



"-------------------------------------------------------------------------------
" 内部エンコーディング設定
"-------------------------------------------------------------------------------
set encoding=cp932                      " 内部エンコーディング



"-------------------------------------------------------------------------------
" エンコーディング、ファイルフォーマット設定
"-------------------------------------------------------------------------------
set fileencoding=cp932                                     " 基本文字コード
set fileencodings=iso-2022-jp,cp932,sjis,euc-jp,utf-8      " 文字コード自動判別(優先順)
set fileformat=dos                      " 基本ファイルフォーマット
set fileformats=dos,unix,mac            " ファイルフォーマット自動判別(優先順)



"-------------------------------------------------------------------------------
" システム設定
"-------------------------------------------------------------------------------
set nobackup                            " backupファイルを作らない
set writebackup                         " ファイルの上書きの前にbackupファイルを作る
                                        " nobackupの場合は、上書きに成功したら削除される
set backupdir=~/vimfiles/backup         " backupファイルディレクトリ
set swapfile                            " swapファイルを作る
set directory=~/vimfiles/swap           " swapファイルディレクトリ

set confirm                             " 保存されていないファイルがあるとき、終了前に保存確認
set hidden                              " 保存されていないファイルがあるときでも、保存しないで他のファイルを表示
set autoread                            " 外部でファイルに変更がされた場合は読みなおす
set browsedir=buffer                    " ファイル保存時の場所を、開いているファイルが有る場所に設定

set noerrorbells                        " エラー音抑止(gvimはgvimrcで指定)
set novisualbell                        " ビジュアルベル抑止(gvimはgvimrcで指定)
set visualbell t_vb=                    " ビープ音抑止(gvimはgvimrcで指定)

set history=100                         " コマンド、検索履歴数
set infercase                           " 補完の際の大文字小文字の区別しない
set wildmenu                            " ファイル名補完有効
set wildmode=list:longest,full          " 補完モード
  "補完モード
  " ""              最初のマッチのみを補完する。
  " "full"          次のマッチを完全に補完する。最後のマッチの次には元の文字列が使われ、その次は再び最初のマッチが補完される
  " "longest"       共通する最長の文字列までが補完される。それ以上長い文字列を補完できないときは、次の候補に移る
  " "longest:full"  "longest" と似ているが、'wildmenu' が有効ならばそれを開始する
  " "list"          複数のマッチがあるときは、全てのマッチを羅列する。
  " "list:full"     複数のマッチがあるときは、全てのマッチを羅列し、最初のマッチを補完する
  " "list:longest"  複数のマッチがあるときは、全てのマッチを羅列し、共通する最長の文字列までが補完される

set shellslash                          " Windowsで"/"を有効
set virtualedit+=block                  " 矩形選択でカーソル位置の制限を解除



"-------------------------------------------------------------------------------
" 表示設定
"-------------------------------------------------------------------------------
set number                              " 行番号の表示
set ruler                               " 右下に行・列の番号を表示
set title                               " タイトル表示
set list                                " 不可視文字を表示
set listchars=eol:$,tab:>-,trail:-,extends:>,precedes:<,nbsp:%
                                        " 不可視文字の置き換え設定
set display=uhex                        " 表示できない文字を16進数で表示

set matchpairs& matchpairs+=<:>         " 対応括弧に<と>のペアを追加
set showmatch                           " 括弧の対応表示
set matchtime=1                         " 括弧の対応表示時間[1/10秒]

set laststatus=2                        " 常にステータスラインを表示
  "ステータスライン表示モード
  " "0"  一番下のウィンドウはステータスラインを表示しない
  " "1"  ウィンドウが1つの時はステータスラインを表示しない 2つ以上ある場合は、ステータスラインを表示する
  " "2"  常にステータスラインを表示する
set cmdheight=2                         " コマンドラインの高さ (gvimはgvimrcで指定)
set showcmd                             " 入力中のコマンドをステータスラインに表示

syntax on                               " シンタックスハイライト
set cursorline                          " カーソル行をハイライト
set cursorcolumn                        " カーソル位置のカラムのハイライト
"colorscheme desert                      " カラースキーマ(gvimはgvimrcで指定)

set scrolloff=5                         " 上下5行の視界を確保
set sidescrolloff=16                    " 左右スクロール時の視界を確保
set sidescroll=1                        " 左右スクロールは一文字づつ行う
set backspace=indent,eol,start          " バックスペースでインデントや改行を削除可能
set whichwrap=b,s,h,l,<,>,[,]           " 左右移動で行跨ぎ可能

set nowrap                              " 折り返さない
set textwidth=0                         " テキストの最大幅を無効にする

set ambiwidth=double                    " 全角記号(○、□等)の位置ズレ対応



"-------------------------------------------------------------------------------
" 検索/置換設定
"-------------------------------------------------------------------------------
set ignorecase                          " 大/小文字無視
set smartcase                           " ただし大文字を含む検索の場合は大/小文字有効
set incsearch                           " インクリメンタルサーチ有効
set hlsearch                            " 検索結果ハイライト表示
set wrapscan                            " 検索をファイルの先頭へループする
set gdefault                            " 置換の時 g オプションをデフォルトで有効



"-------------------------------------------------------------------------------
" 編集
"-------------------------------------------------------------------------------
set clipboard=unnamed,autoselect        " OSクリップボード使用、選択時自動コピー

set tabstop=2                           " タブ幅
set softtabstop=2                       " タブ幅(編集時)
set shiftwidth=2                        " インデント幅

set smarttab                            " 行頭の<Tab>は"shiftwidth"、それ以外は"tabstop"
set shiftround                          " インデントをshiftwidthの倍数に丸める
set expandtab                           " タブの代わりにスペース
set autoindent                          " 前行に合わせてインデント
set smartindent                         " 前行の末尾に合わせてインデントを増減



"-------------------------------------------------------------------------------
" ランタイムパス設定
"-------------------------------------------------------------------------------
if has('vim_starting')
  set runtimepath+=~/vimfiles/bundle/neobundle.vim/
endif



"-------------------------------------------------------------------------------
" neobundle
"-------------------------------------------------------------------------------
call neobundle#rc(expand('~/vimfiles/bundle/'))

NeoBundle 'Shougo/neobundle.vim'
NeoBundle 'Shougo/vimproc'
"NeoBundle 'Shougo/vimproc', {
"      \ 'build' : {
"      \     'windows' : 'make -f make_mingw32.mak',
"      \     'cygwin' : 'make -f make_cygwin.mak',
"      \     'mac' : 'make -f make_mac.mak',
"      \     'unix' : 'make -f make_unix.mak',
"      \    },
"      \ }
NeoBundle 'Shougo/unite.vim'
NeoBundle 'nanotech/jellybeans.vim'
NeoBundle 'Rykka/riv.vim'

NeoBundleCheck



"-------------------------------------------------------------------------------
" ファイルタイプ設定(on)
"-------------------------------------------------------------------------------
filetype on                             " ファイルタイプの自動検出on
filetype plugin on                      " ファイルタイプ別プラグインのロードon
filetype indent on                      " ファイルタイプ別インデントのロードon



"-------------------------------------------------------------------------------
" riv
"-------------------------------------------------------------------------------
let g:riv_fold_level = 1
let g:riv_web_browser = '"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"'
let g:riv_temp_path = 0
let g:riv_html_code_hl_style = "friendly"



"-------------------------------------------------------------------------------
" mapping e.t.c.
"-------------------------------------------------------------------------------

"---------------------------------------
" Space prefix
nnoremap [space] <Nop>
nmap     <Space> [space]
xmap     <Space> [space]

"---------------------------------------
" vimrc編集/反映
nnoremap [space]v :<C-u>tabedit $MYVIMRC<CR>
nnoremap [space]g :<C-u>tabedit $MYGVIMRC<CR>
nnoremap [space]s :<C-u>source $MYVIMRC<CR>
                     \ :source $MYGVIMRC<CR>

"---------------------------------------
" インサートから抜けたら、IME解除
inoremap <silent> <ESC> <ESC>:set iminsert=0<CR>

"---------------------------------------
" 全角スペース表示
function! ZenkakuSpace()
  highlight ZenkakuSpace cterm=reverse ctermfg=darkgreen gui=reverse guifg=darkgreen
endfunction
if has('syntax')
  augroup ZenkakuSpace
    autocmd!
    autocmd ColorScheme                * call ZenkakuSpace()
    autocmd VimEnter,WinEnter,BufRead  * match ZenkakuSpace / /
  augroup END
endif

"---------------------------------------
" タブページ用
" 以下のサイトからの転用
" http://qiita.com/wadako111/items/755e753677dd72d8036d
" ---
" tp で前のタブ、tn で次のタブ
" t1, t2,,,t9 で左からn番目のタブにジャンプ
" tc で新しいタブ, txでタブを閉じる
" ---
" ----- 転用ここから -----
" Anywhere SID.
function! s:SID_PREFIX()
  return matchstr(expand('<sfile>'), '<SNR>\d\+_\zeSID_PREFIX$')
endfunction

" Set tabline.
function! s:my_tabline()  "{{{
  let s = ''
  for i in range(1, tabpagenr('$'))
    let bufnrs = tabpagebuflist(i)
    let bufnr = bufnrs[tabpagewinnr(i) - 1]  " first window, first appears
    let no = i  " display 0-origin tabpagenr.
    let mod = getbufvar(bufnr, '&modified') ? '!' : ' '
    let title = fnamemodify(bufname(bufnr), ':t')
    let title = '[' . title . ']'
    let s .= '%'.i.'T'
    let s .= '%#' . (i == tabpagenr() ? 'TabLineSel' : 'TabLine') . '#'
    let s .= no . ':' . title
    let s .= mod
    let s .= '%#TabLineFill# '
  endfor
  let s .= '%#TabLineFill#%T%=%#TabLine#'
  return s
endfunction "}}}
let &tabline = '%!'. s:SID_PREFIX() . 'my_tabline()'
set showtabline=2 " 常にタブラインを表示

" The prefix key.
nnoremap    [Tag]   <Nop>
nmap    t [Tag]
" Tab jump
for n in range(1, 9)
  execute 'nnoremap <silent> [Tag]'.n  ':<C-u>tabnext'.n.'<CR>'
endfor
" t1 で1番左のタブ、t2 で1番左から2番目のタブにジャンプ

map <silent> [Tag]c :tablast <bar> tabnew<CR>
" tc 新しいタブを一番右に作る
map <silent> [Tag]x :tabclose<CR>
" tx タブを閉じる
map <silent> [Tag]n :tabnext<CR>
" tn 次のタブ
map <silent> [Tag]p :tabprevious<CR>
" tp 前のタブ
" ----- 転用ここまで -----

Pythonでグラフを書く(Windows)

Windows端末で、Pythonを使ってグラフを書くことをめざす。

最終的には、Linuxサーバのリソースデータ(sar、vmstat e.t.c.)をPythonでパースしてグラフ化したい。グラフ化には、Matplotlibを使うのが良さそう。

なので、以下、インストール時のメモ。

準備(インストール)

インストール

  1. Pythonのインストール
  2. Numerical Python
    • > easy_install numpy
      • しかし、エラー発生。Unable to find vcvarsall.bat
      • 少し調べたところ、Visual C++ 2008 Express Editionをインストールすればいいらしい。
    • もろもろ面倒なので、easy_installを利用せず、インストーラを使うことにする。
    • 64bit用のインストーラは、Officialでは用意されていないので、以下のサイトから取得する。
  3. Matplotlib
  4. dateutil
    • > easy_install dateutil
  5. Pyparsing
    • > easy_install pyparsing

使ってみる

以下のサイトあたりから、適当なグラフを書いてみる。

http://kaiseki-web.lhd.nifs.ac.jp/wiki/index.php/Matplotlib_%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E9%9B%86

無事にグラフが表示されれば、完了。