LinuxでのC言語開発環境について〜環境設定indent.proの例〜
- メモ
- indentのバージョン2.2.10以上は -linux で同等
- バージョン2.2.9以下は下記の設定をする
- 下記の設定をする
export INDENT_PROFILE=${HOME}/.etc/indent.pro
- .etc/indent.pro
-nbad -bap -nbc -bbo -hnl -br -brs -c33 -cd33 -ncdb -ce -ci4 -cli0 -d0 -di1 -nfc1 -i8 -ip0 -l80 -lp -npcs -nprs -npsl -sai -saf -saw -ncs -nsc -sob -nfca -cp33 -ss -ts8 -il1
LinuxでのC言語開発環境について〜環境設定.screenrcの例〜
- メモ
- いろんなサイトを参考(多すぎて覚えてない)
- 縦分割対応のバージョンをコンパイルして使用
- ファイルリスト
.screenrc .etc/screenrc
- .scrrenrc
source .envfiles/screenrc
- .etc/scrrenrc
################ # 基本設定 vbell off windows deflogin off defflow off autodetach on ################ # MSG lastmsg startup_message off # Bell代わりのMSG bell_msg "Bell on Window %n (%t)" # MSG表示秒数 msgwait 3 msgminwait 1 pow_detach_msg "Screen session of \$LOGNAME \$:cr:\$:nl:ended." ################ # 文字コード設定 # euc utf8 sjis #kanji utf8 defkanji utf8 defencoding utf8 #cjkwidth on ################ # copy mode バックログ保存行数 defscrollback 9999 ################ # zombie コマンド引数指定、screen中でプロセス死時、指定キーを押すまでウインドウ残。 # 設定してないとプロセスエラーメッセージが残らず消えてしまう # ^[ = ESC zombie "^[" ################ # xterm tweaks # # xterm-52 tweaks: # # - uses background color for delete operations # termcapinfo xterm* be termcapinfo xterm 'is=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;4;6l' ################ # hardstatus(画面下)を変更 # %H:ホスト名,%n:Window番号,%f:フラグ,%t:Window名,%0c,時間 -Lw~+Lw:Window一覧 hardstatus alwayslastline "%{= rw} %H %{= wk}%-Lw%{= bw}%n%f %t%{= wk}%+Lw %{= wk}%=%{= gk} %Y/%m/%d(%D) %0c " #caption always "%{= wk} %-w%{=bu dr}%n %t%{-}%+w %= %{=b wb}%Y/%m/%d(%D) %{=b wb}%c" # 表示方法設定 # sorendition "+rb .G" # 各ウィンドウ毎の下部表示を設定 1.初期化 2.実行プログラム指定 #" " -- (1)区切り # %{ } -- (2)装飾指定 # = dd -- (3)=:クリア, :装飾なし,d:背景色default,d:背景色default # %` -- (4)次行backtick表示指示 #caption always "%{= dd}%`" #backtick 0 0 0 sudo ruby logmonitor.rb # screen中から起動するプロセスに渡す$TERM #OSにscreen-256colorのterminfo必要 # Debian 系なら ncurses-term #term screen-256color # 新規ウィンドウ名を設定 shelltitle "$ |bash" # screen -l 0 # screen起動時の起動設定 shell -${SHELL} ################ # キーアサイン設定 # register U "export DISPLAY=\":0.0\"\012" # register L "export DISPLAY=\"localhost:1\"\012" # register [ "\033:se noai\015a" # register ] "\033:se ai\015a" # bind F paste U # bind f paste L # bind ^] paste [.] # screenコマンド開始キーをCtrl+kに変更 デフォルトはCtrl+a escape ^Kk # w でWindow一覧 bind w windowlist -b # 分割サイズを変更する r で変更開始 j,kでサイズ変更 bind r eval 'echo "Resize window"' 'command -c resize' bind -c resize ^] command bind -c resize j eval 'resize +1' 'command -c resize' bind -c resize k eval 'resize -1' 'command -c resize'
LinuxでのC言語開発環境について〜環境設定.vimrcの例〜
- メモ
- いろんなサイトを参考した(多すぎて覚えてない)
- ファイルリスト
.vimrc .etc/vimrc
- .vimrc
source $HOME/.etc/vimrc
- .etc/vimrc
"--------------------------------------------------------------------------- " 検索の挙動に関する設定: " " インクリメンタルサーチ設定 set incsearch " 検索時に大文字小文字を無視 (noignorecase:無視しない) set ignorecase " 大文字小文字の両方が含まれている場合は大文字小文字を区別 set smartcase "--------------------------------------------------------------------------- " 編集に関する設定: " " インデントするときの挿入するタブの幅 set shiftwidth=4 " KB入力するときの挿入するタブの幅 0==tabstop, !0=softtabstop set softtabstop=4 " タブの画面上での幅 set tabstop=4 " タブをスペースに展開しない (expandtab:展開する) set noexpandtab " インデント設定 autoindent,smartindent,cindent "set autoindent " cindent時の詳細設定 cinoptions-values参照 "set cinoptions= " バックスペースキー動作設定 "set backspace=indent,eol,start "--------------------------------------------------------------------------- " 文字コード設定 set encoding=utf-8 "set fileencodings=cp932,utf-8,eucjp set fileencodings=utf-8,eucjp,cp932 set fileformats=unix,dos set hlg=ja "--------------------------------------------------------------------------- " GUI固有ではない画面表示の設定: " " 行番号を非表示 (number:表示) set nonumber " ルーラーを表示 (noruler:非表示) set noruler " ソースコード折りたたみ機能を有効にする " 設定数種類 manual,indent,expr,syntax,diff,marker " zo:開く zc:閉じる zO,zC:再帰的に "set foldmethod=syntax " カーソル上下行数 999なら常に中央 set scrolloff=999 " カーソル行に下線 set cursorline "--------------------------------------------------------------------------- " 色設定 " 8 SpecialKey スペシャルキー、^@など表示できない文字 " @ NonText EOF以降の~など " d Directory CTRL-Dで表示したディレクトリ " e ErrorMsg エラーメッセージ " f Folded 折り畳まれた行 " F FoldColumn フォールドコラム " i IncSearch インクリメンタルサーチの結果 " l Search 最後の検索結果 " m MoreMsg -- 継続 -- のようなMoreメッセージ " M ModeMsg -- 挿入 -- などのモードメッセージ " n LineNr 行番号 " r Question hit-enterやyes/noなどの質問 " s StatusLine ステータスライン " S StatusLineNC アクティブではないウィンドウのステータスライン " t Title :set allや:autocmdなどで表示される「--- オプション ---」のような文字 " c VertSplit 縦方向へのスプリットの境界 " v Visual ビジュアルモードの選択範囲 " V VisualNOS ビジュアルモードの選択範囲(Vimがアクティブではないとき) " w WarningMsg 警告メッセージ " W WildMenu ワイルドメニュー " たとえば、set highlight=n:ErrorMsg とすると、行番号がErrorMsgで指定した色に設定される。 " " 全角スペース可視化 scriptencoding utf-8 augroup highlightIdegraphicSpace autocmd! autocmd Colorscheme * highlight IdeographicSpace term=underline ctermbg=DarkGreen guibg=DarkGreen autocmd VimEnter,WinEnter * match IdeographicSpace / / augroup END colorscheme default " タブと行末の空白を可視化 test→ set listchars=tab:^_,trail:~ " タブや改行を表示 set list "highlight SpecialKey cterm=underline ctermbg=white ctermfg=blue highlight SpecialKey cterm=underline ctermbg=gray ctermfg=gray "------------------------------------ " .pcファイルをファイルタイプ.esqlcとして開く au BufRead,BufNewFile *.pc setfiletype esqlc " 下記の設定は~/.vim/syntax/にdownloadしたproc.vimをcpすること "au! BufRead,BufNewFile *.pc setfiletype proc "--------------------------------------------------------------------------- "ステータスライン関係 "ステータスラインを常に表示 0:nerver 1:if there two window set laststatus=2 " ステータスライン表示内容 文字コード,改行,ファイル名 set statusline=[%{&fileencoding}][\%{&fileformat}]\ %F%m%r%=<%c:%l> "--------------------------------------------------------------------------- " GNU Globalの設定 "Ctrl+t :Gtags と入力する "Ctrl+h :カーソル下文字列でcurrentのソースコードの grep "Ctrl+i 開いているファイルに定義されている関数の一覧を表示 "Ctrl+j カーソル位置の関数へジャンプ "Ctrl+n 次の検索結果へジャンプする "Ctrl+p 前の検索結果へジャンプする map <C-t> :Gtags map <C-h> :Gtags -gl<CR> map <C-i> :Gtags -f %<CR> map <C-j> :GtagsCursor<CR> map <C-n> :cn<CR> map <C-p> :cp<CR> ":Gtags 関数名 | 関数名 → ソースコード(定義) ":Gtags -r 関数名 | 関数名 → ソースコード(参照) ":Gtags -f ファイル名 | ソースコード → 関数一覧 "global -c 関数名一部 | 関数名の一部 → 関数一覧 ":Gtags -g 検索文字列 | ソースコードの grep
LinuxでのC言語開発環境について〜環境設定.bashrcの例〜
- メモ
- いろんなサイトを参考した(多すぎて覚えてない)
- ファイルリスト
.bashrc .etc/env.sh .etc/bashrc
- .bashrc
if [ -f ~/.etc/env.sh ]; then . ~/.etc/env.sh fi if [ -f ~/.etc/bashrc ]; then . ~/.etc/bashrc fi
- .etc/env.sh
######################################## # 環境の設定 #export LANGUAGE=ja_JP.SJIS export LANG=ja_JP.UTF-8 export LC_ALL=ja_JP.UTF-8 export TZ=JST # Subversionでコミットコメント書く際のエディタ設定 export SVN_EDITOR='vim' # indentコマンドで自動設定される設定値ファイル export INDENT_PROFILE=${HOME}/.etc/indent.pro # 編集ツールをviに設定 export EDITOR=vi # man とかを見るときはいつも less を使う #export PAGER=less # LESSの設定 #export JLESSCHARSET=japanese-sijs #export LESSCHARSET=japanese-sjis export LESS='-c -m -x4' #export LESS="-isnMCd" #export LESS='-X -F -i -m' #export LESSCHARSET="latin1" #export LESSCHARDEF=8bcccbcc18b95.33b33b. #export LESSBINFMT='*n-' #export LESSOPEN="|/usr/bin/lesspipe.sh %s" # manの設定 #export MANPATH=/usr/bin/man:/usr/local/man:/usr/share/man:/sw/man #export MANPAGER=/usr/bin/less #export MANWIDTH=80 # パスの設定 export PATH=$PATH:/sbin:/usr/sbin:/usr/local/sbin:$HOME/bin #export RUBYLIB=$HOME/lib/ruby #export PERL5LIB=$HOME/lib/perl ######################################## # alias設定 alias ls='ls -F --color' alias ll='ls -l' alias lh='ls -lh' alias ld='ls -ld' alias l='ls' alias sl='ls' alias la='ls -A' alias lla='ls -lA' alias llr='ls -ltrA' # サイズはK,M,Gで表示 alias df='df -h' alias du='du -h' alias 644='chmod 644' alias 755='chmod 755' alias view='vi -R' # 拡張正規表現,色づけ export GREP_COLOR='1;37;41' alias grep='grep -E --color=auto' # -iは確認を行う。-vは詳細な情報の表示 alias cp='cp -iv' alias mv='mv -iv' alias rm='rm -iv' # odは16進数でのバイナリダンプコマンド # -tx1zは、1バイトごとに区切って表示 # -Axはアドレスを16進数表示、-vは連続する0をスキップしない alias od='od -tx1z -Ax -v' alias cdp='cd -P' alias pwdp='pwd -P'
- .etc/bashrc
######################################## # 自環境の設定 # 新しく作られたファイルのパーミッションがつねに 644 になるようにする umask 022 # core作る ulimit -c unlimited # core作らない #ulimit -c 0 ######################################## # historyの設定 #--------------------------------------- # 各端末間で履歴の共有をする function share_history { # 以下の内容を関数として定義 history -a # .bash_historyに前回コマンドを1行追記 history -c # 端末ローカルの履歴を一旦消去 history -r # .bash_historyから履歴を読み込み直す } # 上記関数をプロンプト毎に自動実施 後で設定 #PROMPT_COMMAND='share_history' shopt -u histappend # .bash_history追記モードは不要なのでOFFに #--------------------------------------- # "!"をつかって履歴上のコマンドを実行するとき、 # 実行するまえに必ず展開結果を確認できるようにする。 shopt -s histverify #--------------------------------------- # 履歴のサイズ。 export HISTSIZE=19999 # 履歴のMAX保存数を指定 # export HISTFILESIZE=49999 #ファイルに格納する保存数HISTSIZEと同じなので省略 #--------------------------------------- # 記録する内容を設定 # ignoredups:入力が最後のヒストリと一致する場合に記録しない # ignorespace:スペースやタブで始まる行をヒストリに記録しない # ignoreboth:ignorespaceとignoredups両方を指定 # 指定なし:すべての入力をヒストリに記録する export HISTCONTROL=ignoredups # 履歴に入れないもの HISTIGNORE="ls:la:ll:h:H:cd" #--------------------------------------- # 履歴にタイムスタンプを追加 #export HISTTIMEFORMAT="%y/%m/%d %H:%M:%S: " export HISTTIMEFORMAT='%Y-%m-%d %T: ' #--------------------------------------- # Ctrl+R の検索は使いづらいので下記を追加 # h: 直前の履歴 30件を表示する。引数がある場合は過去 1000件を検索する。 # (history で履歴全部を表示させると多すぎるので) function h { if [ "$1" ]; then history 1000 | grep "$@"; else history 30; fi } # H: 直前の履歴 30件を表示する。引数がある場合は過去のすべてを検索する。 function H { if [ "$1" ]; then history | grep "$@"; else history 30; fi } #--------------------------------------- # fcコマンド拡張 #function fceditor () { tt=/tmp/$$.sh; cat $1 | ( read -rd '' s; t=/tmp/$$; echo "function a(){" > $t; echo "$s" >> $t; echo -e " }\n declare -f a" >> $t; chmod +x $t; $t > /dev/null 2>&1; if [ $? = 0 ]; then a=`$t|sed '1,2d;$d;s/....//'`";"`echo "$s"|tail -1|sed 's/^.\+\(#[^#]\+\)$/\1/'`; else a="$s"; fi; rm $t; echo "$a" ) > $tt; vim $tt; sed 's/^ *//' $tt > $1; rm $tt; } #export FCEDIT=fceditor ######################################## # 端末・プロンプトの設定 #--------------------------------------- # 色設定 export CR="$(echo -ne '\r')" export LF="$(echo -ne '\n')" export TAB="$(echo -ne '\t')" export ESC="$(echo -ne '\033')" export C_BLACK="${ESC}[30m" export C_RED="${ESC}[31m" export C_GREEN="${ESC}[32m" export C_YELLOW="${ESC}[33m" export C_BLUE="${ESC}[34m" export C_MAGENTA="${ESC}[35m" export C_CYAN="${ESC}[36m" export C_WHITE="${ESC}[37m" export C_HIGHLIGHT_BLACK="${ESC}[30;1m" export C_HIGHLIGHT_RED="${ESC}[31;1m" export C_HIGHLIGHT_GREEN="${ESC}[32;1m" export C_HIGHLIGHT_YELLOW="${ESC}[33;1m" export C_HIGHLIGHT_BLUE="${ESC}[34;1m" export C_HIGHLIGHT_MAGENTA="${ESC}[35;1m" export C_HIGHLIGHT_CYAN="${ESC}[36;1m" export C_HIGHLIGHT_WHITE="${ESC}[37;1m" export C_DEFAULT="${ESC}[m" #--------------------------------------- # 現在のユーザによってプロンプトの色を変える。 rootは赤 case "$UID" in 0) U_col=${C_RED};; *) U_col=${C_GREEN};; esac #--------------------------------------- # screenの時はwindow番号をホストの後につける # sshで入っているときは、アクセス元IPをさらにその後ろにマゼンダで PS_USER="\[${U_col}\]\u\[${C_DEFAULT}\]" PS_HOST="\[${C_GREEN}\]\h\[${C_DEFAULT}\]" PS_WORK="\[${C_HIGHLIGHT_CYAN}\]\W\[${C_DEFAULT}\]" PS_HIST="\[${C_HIGHLIGHT_BLUE}\]\!\[${C_DEFAULT}\]" if [ -n "${SSH_CLIENT}" ] ; then PS_SSH="\[${C_MAGENTA}\]/$(echo ${SSH_CLIENT} | sed 's/ [0-9]\+ [0-9]\+$//g')\[${C_DEFAULT}\]" else PS_SSH="" fi if [ -n "${WINDOW}" ] ; then PS_SCREEN="\[${C_CYAN}\]#${WINDOW}\[${C_DEFAULT}\]" else PS_SCREEN="" fi #--------------------------------------- # [ (ユーザ名/黒) @ (ホスト名/緑) (履歴番号/青) : (ワーキングディレクトリ/明るい白) ] \$ #export PS1="[${PS_USER}@${PS_HOST}${PS_SCREEN}${PS_SSH} ${PS_HIST}:${PS_WORK}]\$ " # 長いので短く export PS1="[${PS_USER}@${PS_HOST}${PS_SCREEN} ${PS_HIST}:${PS_WORK}]\$ " ######################################## # その他function定義 # つねに直前のコマンドの終了状態をチェックさせる。 # もし異常終了した場合は、その状態(数値)を表示する。 function showexit { local s=$? if [[ $s -eq 0 ]]; then return; fi echo "exit $s" } function prompt_cmds { showexit share_history } PROMPT_COMMAND=prompt_cmds # globalコマンドで関数名検索時に関数名補完させる function global_funcs() { local cur cur=${COMP_WORDS[COMP_CWORD]} COMPREPLY=(`global -c $cur`) } complete -F global_funcs global
LinuxでのC言語開発環境について〜使用ソフト〜
使用ソフト一覧
クライアント(Windows)
- ダウンロードしてインストール。Xクライアントは任意。
- 参考リンクで使用方法を覚えてもらう。
ソフト名 | カテゴリ | 詳細 |
---|---|---|
teraterm | telnet/sshクライアント | サーバを操作するためのソフト 同種ソフト(Poderosa,putty) |
FileZilla | ftp/sftpクライアント | サーバとのファイル送受信するためのソフト 同種ソフト(FFFTP,WinSCP) |
Xming | Xクライアント | サーバのGUIをクライアントに表示できる 同種ソフト(Astec-X) |
サーバ(Linux)
- 下記は必須ソフト、サーバにない場合、管理者に相談
- 参考リンクで使用方法を覚えてもらう
ソフト名 | カテゴリ | 詳細 |
---|---|---|
bash | シェル | Linuxをコンソールで操作する環境 |
vim | エディタ | Linuxで使用されるエディタ 使用方法が独特 |
gcc | コンパイラ | フリーで使用できるコンパイラ(c/c++など複数言語対応) |
gdb | デバッガ | gccで作成したプログラムをテストできる |
make | コンパイル支援 | 動作定義にしたがってコンパイルできる |
- 下記は必要に応じて。
ソフト名 | カテゴリ | 詳細 |
---|---|---|
zsh | シェル | bashより補完が高機能 |
screen | コンソール支援 | コンソール操作で画面を複数開ける |
lcov | カバレッジ確認 | コードのテスト済みを確認できる |
indent | コードスタイル統一 | ソースコードのスタイルを統一できる |
gtags,global(GnuGlobal) | コード閲覧支援 | ソースコードを解析して、閲覧しやすくする |
doxygen | コード閲覧支援 | ソースコードを解析して、閲覧しやすくする |
git | バージョン管理 | ファイルの変更履歴を管理する |
subversion | バージョン管理 | ファイルの変更履歴を管理する 仕事ではまだこっちが主流 |
ソフト環境設定
クライアント(Windows)
- 普通はメニューから選べる
ソフト名 | 設定項目 |
---|---|
teraterm | 接続ホスト情報、文字コードなど |
FileZilla | 接続ホスト情報、文字コードなど |
Xming | 接続ホスト情報、文字コードなど |
サーバ(Linux)
- Linuxでは設定はファイルに記述
- 例は次エントリからを参照
ファイル名 | 使用ソフト | 詳細 |
---|---|---|
~/.bashrc | bash | 環境変数や補完動作などを設定 |
~/.zshrc | zsh | 環境変数や補完動作などを設定 |
~/.vimrc | vim | 表示やファイル単位の見栄えなどを設定 |
~/.screenrc | screen | 見栄えなどを設定 |
~/.globalrc | global(gtags) | 解析ファイル規則などを設定 |
~/indent.pro | indent | コードスタイルを設定 Ver2.2.10以上なら-linuxで。それ以外なら-linuxと同等設定を記述 |
doxyfile | doxygen | 解析ファイル規則、出力内容などを設定 |
Ruby,Perl,Pythonのメモ〜文字コード指定のまとめ〜
メモ:
・日本語の取り扱いのメモ のまとめ
・バージョンはruby 1.9.1p129,perl v5.10.0,Python 3.0.1
ruby | perl | python | |
---|---|---|---|
参考 | bitclust M17N の設計と実装 |
Encode入門 perl - use encoding; #は黒歴史 |
@IT記事 |
基本的な考え方 | 外部文字コードを内部文字コードに変換し、内部文字コードが何かを意識して処理する | 内部はUTF8で外部のコードを内部コードに変換して処理 | 内部はUnicode(UTF16orUTF32?)で外部のコードを内部コードに変換して処理 |
ソースコードの文字コード | コード冒頭に文字コード指定 | 基本的にUTF8で書く | コード冒頭に文字コード指定 |
文字列 | オブジェクト毎に文字コード定義 | バイナリとUTF8フラグ付き文字列 | Unicode(UTF16orUTF32?)文字列のみ |
文字列長 | 文字コード指定が正しいなら文字数 | utfフラグ付きなら文字数 | code unit数(文字数でない)*1 configureで--with-wide-unicodeすれば文字数 |
ファイルオープン | File.open(filename,"r:<ファイルの文字コード>:<プログラム内の文字コード>") | open $fh, "<:encoding(<ファイルの文字コード>)", $filename | f = codecs.open(filename,"r",<ファイルの文字コード>) |
ファイルオープンのメモ | ファイルの文字コードと取得する文字列の文字コードを指定する ファイルの文字コードのみを指定するとその文字コードの文字列を得る ファイルの文字コードとプログラム内の文字コードを同一に指定するとwarningが出る |
ファイルの文字コードを指定して、utf8フラグ付きの文字列を得る | ファイルの文字コードを指定してUnicode文字列を得る |
引数・引数オプション処理 | localeのまま取得? (でもwarning出る) |
内部で変換する | locale→Unicode文字列に自動変換? |
引数ライブラリ | OptionParser | Getopt::Long英語 Getopt::Long日本語 |
optparse英語 optparse日本語 |
Ruby,Perl,Pythonのメモ〜ディレクトリ読み込み〜
メモ:
・日本語の取り扱いのめも その2(ファイル名について)
・バージョンはruby 1.9.1p129,perl v5.10.0,Python 3.0.1
ruby | perl | python | |
---|---|---|---|
文字コード | localeのまま取得? | 内部で変換 | locale→Unicode文字列に自動変換? |
#!/usr/local/bin/ruby # coding: utf-8 require 'pathname' Pathname("./test_dir/").children(false).sort.each{|path| puts path #puts path.to_s.encoding }
#!/usr/bin/perl use strict; use warnings; use utf8; use feature ":5.10"; use Encode; binmode(STDOUT, ':utf8' ); # ファイル名取得 opendir my $dh, './test_dir/' or return; my @files = sort grep !/^\.+$/, readdir($dh); closedir $dh; my @files_utf = map { Encode::decode('utf8',$_) } @files; foreach my $fname(@files_utf){ say $fname; #say utf8::is_utf8($fname) }
#!/usr/local/bin/python3.0 # -*- coding: utf-8 -*- import os fnames = os.listdir("./test_dir/") fnames.sort() for fname in fnames: print(fname)
ファイル名一覧
$ ls -a ./test_dir/ . .. .dot_file .日本語ファイル noJpFile 日本語ファイル
結果
.dot_file .日本語ファイル noJpFile 日本語ファイル