晴耕雨読

霞を食べて生きる

外部ソフトやプラグインに依存しないCLI環境とdotfiles

はじめに

.vimrcや.tmux.conf,.tcshrcなどをgithubでdotfilesとして管理しているのですが,春から就職する会社はセキュリティが厳しく,githubなどの外部サービスの利用が期待できないので,はてなブログとして公開することでどこからでもアクセスできるようにしておく.

外部サービスが使えない環境を前提としているので,原則としてプラグインなどは導入せずバニラで使用する. また,シェルには半導体業界のデファクトスタンダードであるtcshを利用する.

CLI環境

ここに自作したCLIツールやスクリプトを書く.

dotfiles

ここにdotfilesをコピペする.コメントや解説は後日

.vimrc

mapc!
let mapleader="\<SPACE>"
se timeoutlen=400
filetype plugin indent on
syntax on

nn <c-a> <Home>
nn <c-e> <End><Right>
nn x "_x
nn X "_X
nn dh ^_d$
nn U <c-r>
nn Y y$
nn <silent>j gj
nn <silent>k gk
nn s <Nop>
nn S <Nop>
nn c <Nop>
nn C <Nop>
nn sh <c-w>h
nn sj <c-w>j
nn sk <c-w>k
nn sl <c-w>l
nn sp :bro ol<CR>
nn <C-s> :cal ToggleNetrw()<CR>
nn ss :cal ToggleNetrw()<CR>
nn <silent>H 5h
nn <silent>J 10gj
nn <silent>K 10gk
nn <silent>L 5l
nn <Leader>s :cal Savereg()<CR>
nn <Leader>l :cal Loadreg()<CR>
nn <silent><Tab> :cal NextNonQuickfix()<CR>
nn <silent><S-Tab> :cal PrevNonQuickfix()<CR>
nn <BS> "_X
nn <BS> "_X
nn <CR> :call append(line("."), "")<CR><Down>
nn n nzzzv
nn N Nzzzv
nn p ]p
nn P ]P
nn ; :
nn t ;
nn T ,
nn <Leader><space> za
nn <Leader>d zd
nn <Leader>D zE
nn <expr> i empty(getline('.')) ? '"_cc' : 'i'
nn <expr> A empty(getline('.')) ? '"_cc' : 'A'nn <Leader>a zR
nn <C-c> :cal ToggleQuickfix()<CR>
nn cc :cal ToggleQuickfix()<CR>
nn cp :cp<CR>
nn cn :cn<CR>
nn <expr> <C-p> '<Cmd>CCycle -' .. v:count1 .. '<CR>'
nn <expr> <C-n> '<Cmd>CCycle '  .. v:count1 .. '<CR>'

vn x "_x
vn s <Nop>
vn S <Nop>
vn H 5h
vn J 10j
vn K 10k
vn L 5l
vn t ;
vn T ,
vn <silent>j gj
vn <silent>k gk
vn <c-a> 0
vn <c-e> $
vn v <c-v>
vn ( di()<Esc>P<Left>%
vn [ di[]<Esc>P<Left>%
vn { di{}<Esc>P<Left>%
vn ) di()<Esc>P<Left>%
vn ] di[]<Esc>P<Left>%
vn } di{}<Esc>P<Left>%
vn < di<><Esc>P<Left>%
vn > >gv
vn ; :
vn n nzzzv
vn N Nzzzv
vn <BS> "_X
vn <space> zf
vn <c-a> <Home>
vn <c-e> <End>
vn <c-p> <Up>
vn <c-n> <Down>

ino jj <esc>
ino Jj <esc>
ino jJ <esc>
ino JJ <esc>

cno <c-a> <Home>
cno <c-e> <End>
cno <c-p> <Up>
cno <c-n> <Down>
cno <c-b> <Left>
cno <c-f> <Right>
cno <c-d> <Del>
cno jj <C-c>
cno Jj <C-c>
cno jJ <C-c>
cno JJ <C-c>
cno qw wq
com! Wq wq
com! Qw wq
com! WQ wq
com! DiffOrig vne | se bt=nofile | r ++edit # | 0d_ | diffthis | wincmd p | diffthis
com! Reload so ~/.vimrc

xn y mzy`z
xn p P
xn i<space> iW
xn a<space> aW
ono i<space> iW
ono a<space> aW

se enc=utf-8
se fenc=utf-8
se nobk
se noswf
se nocp
se so=2
se wmnu
se ar
se hid
se ml
se smd
se sc
se ve=onemore,block
se bs=indent,eol,start
se vi='10,\"1000
se cot=menuone,noselect
se pa=$PWD/**
se acd

let undodir=expand('~/.vim/undodir')
if !isdirectory(undodir)
  cal mkdir(undodir, 'p')
en
let &undodir=undodir
se udf
se ul=1000

se fdls=0
se fdc=1

se vop-=options
se fdm=manual

if &term=~'screen' || &term =~ 'tmux'
  let &t_SI="\ePtmux;\e\e[6 q\e\\"
  let &t_EI="\ePtmux;\e\e[1 q\e\\"
  let &t_SR="\ePtmux;\e\e[4 q\e\\"
el
  let &t_SI="\e[6 q"
  let &t_EI="\e[1 q"
  let &t_SR="\e[4 q"
en

se nu
se ru
se cul
se sm
se tal=%!BufferTabLine()
se stal=2
se ls=2
se wim=full
se wic
se vb t_vb=

se ww=b,s,h,l,<,>,[,]
" set shortmess+=I
se stl=%m%r%h%w\ [%l/%L]\ %y\ %F
se wrap
se lbr

se sb
se spr
" Tab
ino <expr> <tab> pumvisible() ? "\<c-n>" : "\<tab>"
se et
se ts=2
se sw=2
se sts=2
se ai
se si

" Search
se ic
se scs
se is
se ws
se hls
no <silent><esc><esc> :nohlsearch<cr><esc>:diffoff<cr><esc>

" Command line window
se cwh=20
" mouse
if has('mouse')
    se mouse=a
    if has('mouse_sgr')
        se ttym=sgr
    elsei v:version > 703 || v:version is 703 && has('patch632')
        se ttym=sgr
    el
        se ttym=xterm2
    en
en

" Color scheme
se t_Co=256
let &t_8f = "\<Esc>[38;2;%lu;%lu;%lum"
let &t_8b = "\<Esc>[48;2;%lu;%lu;%lum"

se bg=dark
hi Normal           ctermfg=252 ctermbg=NONE                 
hi Comment          ctermfg=244                              
hi Constant         ctermfg=99                               
hi Statement        ctermfg=197               cterm=BOLD     
hi String           ctermfg=228               cterm=BOLD     
hi Character        ctermfg=99                               
hi Identifier       ctermfg=208                              
hi Type             ctermfg=81                               
hi Title            ctermfg=228                              
hi Preproc          ctermfg=81                               
hi Special          ctermfg=81                               
hi Directory        ctermfg=14                               
hi Question         ctermfg=46                               
hi markdownLinkText ctermfg=228                              
hi markdownItalic                             cterm=NONE     
hi markdownItalic                             cterm=ITALIC   
                                                             
hi Cursor                        ctermbg=240                 
hi LineNr           ctermfg=252  ctermbg=238                 
hi CursorLine                    ctermbg=238  cterm=NONE     
hi CursorLineNr     ctermfg=238  ctermbg=250  cterm=NONE     
hi Visual                        ctermbg=238  cterm=NONE     
hi Search           ctermfg=212  ctermbg=236  cterm=UNDERLINE
hi incsearch        ctermfg=212  ctermbg=236  cterm=UNDERLINE
hi matchparen       ctermfg=212  ctermbg=NONE cterm=UNDERLINE
hi Pmenu                         ctermbg=238  cterm=NONE     
hi PmenuSel         ctermfg=252  ctermbg=240  cterm=NONE    
hi WinSeparator     ctermfg=252  ctermbg=238                 
hi VertSplit        ctermfg=238  ctermbg=252                 
                                                             
hi statusline       ctermfg=156  ctermbg=238                 
hi statuslinenc     ctermfg=238  ctermbg=250                 
hi tablinesel       ctermfg=238  ctermbg=156                 
hi tablinefill      ctermfg=238  ctermbg=252                 
hi tabline          ctermfg=252  ctermbg=238                 
hi ModeMsg          ctermfg=11                               
hi ErrorMsg         ctermfg=9    ctermbg=NONE                
hi WarningMsg       ctermfg=9    ctermbg=NONE                
                                                             
hi DiffAdd                       ctermbg=24                  
hi DiffDelete       ctermfg=162  ctermbg=53                  
hi DiffChange                    ctermbg=236                 
hi DiffText         ctermfg=210  ctermbg=236   cterm=BOLD    
                                                             
hi FoldColumn       ctermfg=81   ctermbg=238                 
hi Folded           ctermfg=81   ctermbg=NONE                
                                                             
hi netrwDir         ctermfg=81   ctermbg=NONE                
hi netrwClassify    ctermfg=250  ctermbg=NONE                
hi netrwLink        ctermfg=156  ctermbg=NONE                
hi netrwTreebar     ctermfg=242  ctermbg=NONE                
hi netrwSymLink     ctermfg=208  ctermbg=NONE                
hi netrwExe         ctermfg=99   ctermbg=NONE                

let s:vimreg=expand('~/.vim/vimreg')
fu! Savereg() abort
  cal writefile([json_encode(getreginfo())], s:vimreg)
  ec 'Save register'
endf
fu! Loadreg() abort
  cal setreg(v:register, readfile(s:vimreg)->join()->json_decode())
  ec 'Restore register'
endf

fu! BufferTabLine()
  let buffer_tabline=''
  let s:buffer_info=s:GetBufferName()
  for i in s:buffer_info
    if i[3] == 1
      let buffer_tabline=buffer_tabline . '%#TabLineSel#'
    el
      let buffer_tabline=buffer_tabline . '%#TabLine#'
    en
  
    let buffer_tabline=buffer_tabline . i[0] . ':' . i[1] . ' '
  
    if i[2] == 1
      let buffer_tabline=buffer_tabline . ' +'
    en
  
  endfo

  let buffer_tabline=buffer_tabline . '%#TabLineFill#%T'
  let buffer_tabline=buffer_tabline . '%='
  retu buffer_tabline
endf

fu! s:GetBufferName()
  redi => s:buffers
    silent ls
  redi END
  let s:result=[]
  let s:buffer_list=split(s:buffers, "\n")
  for b in s:buffer_list
    let s:buffer_line=split(b)
    let s:buffer_num=s:buffer_line[0]
    let s:buffer_name=''
    let s:current_buffer=0
    let s:edit_flag=0
    let s:unmodifiable=0
    
    for i in s:buffer_line
      if i == '%a'
        let s:current_buffer=1
      elsei i == '+'
        let s:edit_flag=1
      elsei i == 'a-' || i == '%a-'
        let s:unmodifiable=1
      elsei i[0] == '"'
        let s:path=substitute(i, '"', '', 'g')
        let s:name_path=split(s:path, '/')
        let s:buffer_name=s:name_path[len(s:name_path) - 1]
      el
      en
    endfo

    if s:unmodifiable != 1
      let s:result=add(s:result, [s:buffer_num, s:buffer_name, s:edit_flag, s:current_buffer])
    en
  endfo
  retu s:result
endf

let g:netrw_banner=0
let g:netrw_altv=1
let g:netrw_preview=1
let g:netrw_liststyle=3
let g:netrw_keepdir=0
let g:netrw_browse_split=4
let g:netrw_bufsettings='noma nomod number nobl nowrap ro'
let g:netrw_dirhistmax=0
let g:netrw_followsymlink=1
let g:netrw_mousemaps=1
let g:netrw_sort_sequence='[\/]$,*'
let g:netrw_sort_options='i'
let g:netrw_fastbrows=0
let g:netrw_timefmt="%Y/%m/%d(%a) %H:%M:%S"
let g:netrw_sizestyle="H"

let g:NetrwIsOpen=0
fu! ToggleNetrw()
    if g:NetrwIsOpen
      let i = bufnr("$")
      wh (i >= 1)
          if (getbufvar(i, "&filetype") == "netrw")
              silent exe "bw" . i
          en
          let i-=1
      endw
      let g:NetrwIsOpen=0
    el
      let g:NetrwIsOpen=1
      silent Le
      silent vert res 25
    en
endfu

aug MyNetrwSettings
    au!
    au FileType netrw nn <buffer> s <Nop>
    au FileType netrw nn <buffer> <Tab> <Nop>
    au FileType netrw nn <buffer> <S-Tab> <Nop>
    au FileType netrw nn <buffer> <c-a> <HOME>
    au FileType netrw nn <buffer> <c-e> <END>
    au FileType netrw nn <buffer> <c-p> <Up>
    au FileType netrw nn <buffer> <c-n> <Down>
    au FileType netrw nn <buffer> <c-b> <Left>
    au FileType netrw nn <buffer> <c-f> <Right>
    au FileType netrw nn <buffer> > <c-w>2>
    au FileType netrw nn <buffer> < <c-w>2<
    au FileType netrw let g:NetrwIsOpen=1
    au FileType netrw vert silent res 5
aug END

let g:QuickfixIsOpen=0
fu! ToggleQuickfix()
    if g:QuickfixIsOpen
      let i = bufnr("$")
      wh (i >= 1)
          if (getbufvar(i, "&filetype") == "qf")
              silent exe "bw" . i
          en
          let i-=1
      endw
      let g:QuickfixIsOpen=0
    el
      let g:QuickfixIsOpen=1
      silent cope
      silent res 5
    en
endfu

aug MyQuickfixSettings
    au!
    au FileType qf nn <buffer> <Tab> <Nop>
    au FileType qf nn <buffer> <S-Tab> <Nop>
    au FileType qf nn <buffer> <CR> <CR>
    au FileType qf let g:QuickfixIsOpen=1
    au FileType qf silent res 5
aug END

fu! NextNonQuickfix()
  let curbuf = bufnr('%')
  exe 'bn'
  wh &buftype == 'quickfix'
    exe 'bn'
    if bufnr('%') == curbuf
      brea
    end
  endw
endf

fu! PrevNonQuickfix()
  let curbuf = bufnr('%')
  exe 'bp'
  wh &buftype == 'quickfix'
    exe 'bp'
    if bufnr('%') == curbuf
      brea
    end
  endw
endf

aug QuickFixCmd
  au!
  au QuickFixCmdPost *grep* cwindow
aug END

fu! s:c_cycle(count) abort
  let qf_info = getqflist({ 'idx': 0, 'size': 0 })
  let size = qf_info->get('size')
  if size == 0
    retu
  end
  let idx = qf_info->get('idx')
  let num = (idx + size + a:count) % size
  if num == 0
    let num = size
  end
  exe num .. 'cc'
endf
com! -nargs=1 CCycle call s:c_cycle(<q-args>)

aug HighlightSpaces
  au!
  au VimEnter,WinEnter,BufWinEnter,ColorScheme * hi Spaces cterm=underline ctermfg=244 ctermfg=244
  au VimEnter,WinEnter,BufWinEnter * match Spaces /^\s\+\|\s\+$/
aug END

aug vimrcEx
  au!
  au BufRead * if line("'\"") > 0 && line("'\"") <= line("$") |
  \ exe "normal g`\"" | en
aug END

aug source-vimrc
  au!
  au BufWritePost *vimrc so $MYVIMRC | se fdm=manual
aug END

.tmux.conf

set -g prefix C-o
unbind C-b

set -g xon
unbind C-s
set -s escape-time 20
set -g history-limit 100000
set -g mode-keys vi
set -g aggressive-resize off
set-option -g default-terminal "tmux-256color"
set-option -ga terminal-overrides ",$TERM:Tc"

bind \\ split-window -h -c "#{pane_current_path}"
bind | split-window -h -c "#{pane_current_path}"
bind - split-window -v -c "#{pane_current_path}"
bind C-d detach-client
bind C-x kill-pane
bind r source-file ~/.tmux.conf \; display "Reloaded!"
bind C-o send-key C-o
bind C-r source-file ~/.tmux.conf \; display "Reloaded!"

bind -n C-h select-pane -L
bind -n C-l select-pane -R
bind -n C-j select-pane -D
bind -n C-k select-pane -U
unbind C-Enter

bind C-c new-window -c "#{pane_current_path}"
bind -n M-l select-window -t :+
bind -n M-h select-window -t :-

bind -n M-j switch-client -n
bind -n M-k switch-client -p

bind -r H resize-pane -L 1
bind -r J resize-pane -D 1
bind -r K resize-pane -U 1
bind -r L resize-pane -R 1

bind s new-session
bind C-s new-session
bind . command-prompt "rename-session %%"

bind S set-window-option synchronize-panes\; display "Toggle Sycronizer"

set -g base-index 1
setw -g pane-base-index 1

set -g mouse on
bind-key -T edit-mode-vi WheelUpPane send-keys -X scroll-up
bind-key -T edit-mode-vi WheelDownPane send-keys -X scroll-down
bind-key -T copy-mode-vi v send-keys -X begin-selection
bind-key -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "reattach-to-user-namespace pbcopy"
unbind-key -T copy-mode-vi Enter

setw -g status-style fg=colour250,bg=colour238
set -g status-left ""
set -g status-right "#[bg=colour156, fg=colour238, bold][%Y/%m/%d %H:%M][#S]"
set -g message-style 'fg=colour238,bg=colour228, bold'
set -g message-command-style 'fg=colour238,bg=colour228, bold'
set -g mode-style 'fg=colour238,bg=colour228, bold'

set -g status-justify left
setw -g window-status-format '#[fg=colour248, bold] #h #W'
setw -g window-status-current-format '#[bg=colour156, fg=colour238, bold]#{?client_prefix,#[bg=colour228],} #h #W'

set -g window-style 'bg=colour236'
set -g window-active-style 'bg=colour233'

set -g pane-border-style 'fg=colour238, bg=colour232'
set -g pane-active-border-style 'fg=colour238, bg=colour232'
set -g clock-mode-colour colour156
set -g clock-mode-style 24

.tcshrc

unalias *

# enviroment value
setenv LESS '-i -M -R -Q -x4 -z-2 -g -S'

setenv TERM xterm-256color
setenv COLORTERM truecolor
setenv EDITOR 'vim'
setenv PAGER 'less'
setenv GIT_EDITOR 'vim'
setenv LS_COLORS 'rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.pdf=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:'
setenv GREP_COLORS 'ms=01;31:mc=01;31:sl=01;32:cx=01;33:fn=35:ln=32:bn=32:se=36'

# complete
set filec
set autolist=ambiguous
set complete=enhance
set correct=all
set autocorrect
set autoexpand
set listjobs=long

if ( ! -e ~/.tmp) then
  mkdir ~/.tmp
endif
# history
if ( ! -e ~/.tcsh_history) then
  touch ~/.tcsh_history
endif
set histfile = ~/.tcsh_history
set history = 10000
set savehist = (10000 merge)
set histdup = erase

# other
set color
set host=`hostname`
set nobeep
set noclobber
set notify
set path = ($path ~/.fzf/bin ~/.local/bin ~/scripts)
set rmstar
set tperiod=1

alias gitbranch '\git branch --no-color |& sed -e "/^[^*]/d" -e "s/* \(.*\)/\[\1\]/"'
alias precmd 'history -S && history -L'
set prompt = "%{\e[32;1m%}%n@%m %{\e[34;1m%}[%P] %{\e[39;0m%}[%~] %{\e[32;1m%}`gitbranch` \n%{\e[34;1m%}-> %%%{\e[0m%} "
alias cd 'chdir \!* && pwd -L >> ~/.cd_history && set prompt = "%{\e[32;1m%}%n@%m %{\e[34;1m%}[%P] %{\e[39;0m%}[%~] %{\e[32;1m%}`gitbranch` \n%{\e[34;1m%}-> %%%{\e[0m%} "'

if ( ! -e ~/.cd_history) then
  touch ~/.cd_history
endif

if ( ! -e ~/.vim/vimreg) then
  touch ~/.vim/vimreg
endif

if ( ! -e ~/.vim/vimhis) then
  touch ~/.vim/vimhis
endif
alias dclean 'awk '\''{ seen[$0] = NR } END { for (line in seen) print seen[line], line }'\'' ~/.cd_history | sort -k1,1n | cut -d" " -f2- | tail -n 99 >! ~/.tmp/.cd_history.temp && mv ~/.tmp/.cd_history.temp ~/.cd_history && set dcd_cmp = `cat ~/.cd_history | nl -n rz -w 2 | cut -f1 | tac | xargs` && complete dcd "C/*/($dcd_cmp)/"'
alias vclean 'awk '\''{ seen[$0] = NR } END { for (line in seen) print seen[line], line }'\'' ~/.vim/vimhis | sort -k1,1n | cut -d" " -f2- >! ~/.tmp/.vimhis.temp && mv ~/.tmp/.vimhis.temp ~/.vim/vimhis'
alias dhist 'dclean && cat -n ~/.cd_history | tail -n -20'
alias dgrep 'dclean && cat -n ~/.cd_history | grep'
alias dcdl 'cd `tail -n 1 ~/.cd_history` && pwd -L'
alias dcd 'cd `tail -n +\!* ~/.cd_history | head -1` && pwd -L'
alias drm 'sed -i '\''\!*d'\'' ~/.cd_history'
alias dless 'dclean && cat -n ~/.cd_history | less'
alias dhis dhist
alias dhi dhist
alias dls dhist
alias dles dless
alias cdhistory 'dclean && vim ~/.cd_history'
alias vimrc 'vim ~/.vimrc'
alias tcshrc 'vim ~/.tcshrc'
alias bashrc 'vim ~/.bashrc'
alias gitconfig 'vim ~/.gitconfig'
alias tmuxconf 'vim ~/.tmux.conf'

alias reload 'source ~/.tcshrc'
alias reloa 'source ~/.tcshrc'
alias relo 'source ~/.tcshrc'
alias ls 'ls -vF --color=auto --group-directories-first'
alias ll 'ls -hl --time-style=+"%Y/%m/%d %H:%M:%S"'
alias la 'll -a'
alias llt 'ls -thl --time-style=+"%Y/%m/%d %H:%M:%S"'
alias lat 'llt -a'
alias tree 'tree -C'
alias grep 'grep --color=auto'
alias fgrep 'fgrep --color=auto'
alias egrep 'egrep --color=auto'

# for typo
alias cd- 'cd -'
alias cd~ 'cd ~'
alias cd.. 'cd ..'
alias cd../ 'cd ../'
alias cd. 'cd ../'
alias cd./ 'cd ../'
alias cd,, 'cd ..'
alias cd,,/ 'cd ../'
alias cd, 'cd ../'
alias cd,/ 'cd ../'
alias dc 'cd'
alias dc- 'cd o'
alias dc~ 'cd ~'
alias dc.. 'cd ..'
alias dc../ 'cd ../'
alias dc. 'cd ../'
alias dc./ 'cd ../'
alias dc,, 'cd ..'
alias dc,,/ 'cd ../'
alias dc, 'cd ../'
alias dc,/ 'cd ../'
alias sl 'ls'
alias ks 'ls'
alias sk 'ls'
alias lla 'la'
alias les 'less'
alias vim 'vclean && \vim'
alias vim. 'vim ./'
alias vim./ 'vim ./'
alias e 'emacs -nw'
alias v. 'vim ./'
alias v./ 'vim ./'
alias vi. 'vim ./'
alias vi./ 'vim ./'
alias vim- 'vim -'
alias vi- 'vim -'
alias make 'set make_cmp = `cat Makefile | sed -n '\''s/:$//p'\'' | xargs` && complete make "C/*/($make_cmp)/" && \make'
alias maek 'make'
alias amek 'make'
alias amke 'make'
alias meak 'make'
alias meka 'make'

alias l 'ls'
alias v 'vim'
alias vi 'vim'
alias ci 'vim'
alias cim 'vim'
alias in 'vim'
alias vin 'vim'
alias cin 'vim'
alias vm 'vim'
alias t 'tmux'
alias ta 'tmux a -t'
alias taa 'tmux a'
alias tls 'set tls_cmp = `tmux ls | sed '\''s/:.*$//g'\'' | xargs` && complete ta "C/*/($tls_cmp)/" && tmux ls | nl'
alias tlsa 'tmux a -t `tmux ls | sed '\''s/:.*$//g'\'' | tail -n +\!* | head -1`'
alias tn 'tmux new -s'
alias tkill 'tmux kill-session -t'
alias tkillall 'tmux kill-server'
alias git 'set git_cmp = `\git log | grep "^commit" | cut -d" " -f2 | cut -c 1-10 | xargs` && complete gvdiff "C/*/($git_cmp)/" && \git'
alias g 'git'
alias gi 'git'
alias gst 'git status'
alias ga 'git add'
alias gaa 'git add -A'
alias gap 'git add -p'
alias gb 'git branch'
alias gbd 'git branch -d'
alias gc 'git commit'
alias gcm 'git commit -m'
alias gco 'git checkout'
alias gcob 'git checkout -b'
alias gps 'git push'
alias gpl 'git pull'
alias gl 'git log'
alias glog 'git log'
alias gtree 'set git_cmp = `git log | grep "^commit" | cut -d" " -f2 | cut -c 1-10 | xargs` && complete git "C/*/($git_cmp)/" && complete gvdiff "C/*/($git_cmp)/" && git tree'
alias glp 'git log -p'
alias glogp 'git log -p'
alias gtreep 'git tree -p'
alias gd 'git diff'
alias gdt 'git difftool'
alias gdiff 'git diff'
alias gdifftool 'git difftool'
alias gvimdiff 'git difftool'
alias gvd 'git difftool'
alias gvdiff 'git difftool'
alias gsta 'git stash'
alias gstu 'git stash -u'
alias gstum 'git stash -u -m'
alias gstp 'git stash pop'
alias gmr 'git merge'
alias gls 'git log --name-status -n1 $1 | awk -F'\'' '\'' '\''{print $2}'\'';'

bindkey -s "^[u" "^Ucd ..\n"
bindkey -s "^[-" "^Ucd -\n"
bindkey ^P  history-search-backward
bindkey ^N  history-search-forward
# bindkey ^R i-search-back
bindkey ^I complete-word-fwd
bindkey ^[[Z complete-word-back
bindkey ^W backward-delete-word

# Compress
complete lha            'n/*/f:*.{lzh,LZH}/'
complete unzip          'p/*/f:*.{ZIP,zip}/'
complete gzip           'n/-d/f:*.{gz,Z,tgz,TGZ}/'  \
                'n/*/f:^*.{gz,Z,tgz,TGZ}/'
complete {gunzip,gzcat,zcat}    'n/*/f:*.{gz,Z,tgz,TGZ}/'
complete com{,press}        'n/*/f:^*.Z/'
complete unc{,ompress}      'n/*/f:*.Z/'
complete tar           'n/*/f:*.{gz,Z,tar.gz,tgz,TGZ,tar.bz2}/'

# Edit
complete {gnuplot,gp}       'n/*/f:*.{plt,gp}/'
complete 'ps?*'         'n/*/f:*.{ps,eps,PS,EPS}/'
complete 'tgif*'        'n/*/f:*.obj/'
complete {vi,vim,vimdiff,less,cat,head,tail}    'n/*/f:^*.{o,gz,zip,tar,a,so,pdf,png,jpg,crash,ac0,tr0,so.*}/' # except binary file

#software
complete hspice            'n/*/f:*.{sp}/'

# Job
complete ps         'n/-*u/u/'
complete {fg,bg,stop}       'c/%/j/ p/1/"(%)"//'

# Env
complete complete       'p/1/X/'
complete uncomplete     'n/*/X/'
complete alias          'p/1/a/'
complete unalias        'n/*/a/'
complete set            'c/*=/f/' 'p/1/s/=' 'n/=/f/'
complete unset          'n/*/s/'
complete env            'p/1/e/='
complete envg           'p/1/e/'
complete {set,print}env     'p/1/e/'
complete unsetenv       'n/*/e/'

# Daily command
complete {cd,chdir,pu,po} \
                'p/1/d/' \
                'n/-*/d/'
complete rmdir       'n/*/d/'
complete {,j}{man,whatis}   'n/-M/d/'   \
                'n/*/c/'
complete {which,where,strace,exec,trace} \
                'p/1/c/'
complete find 'c/-/(print name type)/'
complete find           'n/-name/f/' \
                'n/-type/(c b d f p l s)/' \
                'n/-exec/c/' \
                'c/-/(name type user size ctime mtime atime print exec )/' \
                'n/*/d/'
complete chgrp          'p/*/g/'
complete chown          'p/*/u/'

# Remove
complete rm     'c/--/"(directory force interactive verbose recursive help version)"/' \
            'n/*/f:^*.{c,cc,C,h,in,tex}/'


source ~/.cshrc-common

bindkey -s ^R "^Ufzf-history\n"
bindkey "^S" undefined-key 
alias fd 'cd `dclean && cat ~/.cd_history |fzf --tac` && pwd -L'
alias fzf-history 'eval `history | cut -f3 | fzf --tac`'
alias ffh 'ssh `cat ~/.ssh/config | grep ^Host | cut -d" " -f2 | fzf --tac`'
alias ffhcd 'sshcd `cat ~/.ssh/config | grep ^Host | cut -d" " -f2 | grep -v aladdin | fzf --tac`'
alias fta 'tmux a -t `tmux ls | cut -d" " -f1 | sed "s/://g" | fzf --tac`'

.gitconfig

[user]
    email = your@email
    name = yourname
[credential]
    helper = cache --timeout=86400
[core]
    editor = vim
    pager = less -i -M -R -Q -F -X
    fileMode = false
[diff]
    tool = vimdiff
[difftool]
    prompt = false
[color]
    ui = auto
[merge]
    tool = vimdiff
[mergetool]
    prompt = false
    keepBackup = false
[alias]
    tree = log --graph --pretty=format:'%C(yellow)%h%Creset -%C(red)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative
  st =  status
  a =  add
  aa = add -A
  ap = add -p
  b = branch
  bd = branch -d
  c = commit
  cm = commit -m
  co = checkout
  cob = checkout -b
  ps = push
  pl = pull
  l = log
  lp = log -p
  logp =  log -p
  treep = log --graph --pretty=format:'%C(yellow)%h%Creset -%C(red)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit -p
  d =  diff
  dt =  difftool
  vimdiff = difftool
  vd =  difftool
  vdiff =  difftool
  sta = stash
  stals = stash list
  stu = stash -u
  stum = stash -u -m
  stp = stash pop
  mr = merge

更新履歴

  • 20250122 記事公開.dotfilesをコピペ.継ぎ足し継ぎ足しで書いているので後で整理.コメントや解説も後日.

研究発表・プレゼンテーションべからず集

はじめに

お久しぶりです.数か月間当ブログを放置していましたが,そろそろ書かなきゃいけないなと思っていたので義務で書いていきます.

大学院生活で,所属の研究グループで行われる進捗報告会や,他大学の先生や企業の方の講演,他大学の学生の発表などを多く見てきました. 中には「これはいいね」と思うような発表もあれば「これはマズいんじゃ」と思うような発表もあり,そろそろ目が肥えてきた頃だと思います(ほんまか?).

また,自身の登壇や原稿執筆で身に付けた話すスキル・書くスキルを何か形にしたいとも思っていたので, 「研究発表・プレゼンテーションべからず集」として個人的に研究発表・プレゼンテーションで推奨しない事柄をまとめていきます.

本記事の対象

  • これから研究発表・プレゼンテーションなどで登壇する人
  • 後で見返したい自分

言い訳 予防線 おことわり

本記事の内容は,筆者の専攻である電気電子工学の分野の流儀に準拠しており,また個人的な好みが多分に含まれています

大目に見てください.

べからず集

以下,書きやすさのために常体で書く.

本べからず集では,各項目を筆者のキレ度🤬で評価する.キレ度🤬は5段階であり,おおよその目安は以下の通りである.

  • キレ度1🤬
    • あら?
    • 正直あんまり気にしてない
    • 各人の好み次第
  • キレ度2🤬🤬
    • まぁまぁ...
    • ちょっと気になるけれど別に問題はない
    • 治せば発表の質が上がってグッド
  • キレ度3🤬🤬🤬
    • ふーん...
    • このあたりから聴講者の理解の妨げになってくる
    • 締め切りが差し迫ってない限り治すべき
  • キレ度4🤬🤬🤬🤬
    • むっ
    • 著しく聴講者の理解を妨げる
    • これを放置して発表するのはまずい
  • キレ度5🤬🤬🤬🤬🤬
    • かっちーん!!!
    • 存在自体が害悪
    • 直ちにやめるべき

では,べからず集を書いていく.大きく,スライド構成篇と登壇中篇に分けているが,これらは無関係ではなく相互に影響しあうものなので,便宜的で適当な分け方ということに留意されたい.

スライド構成篇

スライドのページ番号は右下に書くべからず

  • キレ度2🤬🤬

右下に小さく薄い文字でページ番号を表示している発表スライドが散見されるが,見づらい(見えない)ので意味がないし, スライド作成時にも図表と位置が干渉して邪魔になる.スライドの右上に大きく表示するべきだ.

また,ページ番号の表示は「現在ページ/全ページ数」とすると良い.(こいつの発表いつ終わんねん...)という不安を聴講者に抱かせずに済む. ゴール地点がわかっていると,そこから逆算して集中力のペース配分が出来るので,こういう心遣いはとても聴講者フレンドリー.

スライドに長々と文章を書くべからず

  • キレ度4🤬🤬🤬🤬

原稿執筆のノリで発表スライドを作成すると,得てして長々と文章が書かれたスライドが出来てしまう.

スライドは原稿用紙ではないので,箇条書きや図表を駆使して効果的に発表すべし.文字だけのスライドはご法度. また,体言止めを使うことを意識すれば,長々と文章を書くクセを抑えられる.

「ご清聴ありがとうございましたスライド」を作るべからず

  • キレ度5🤬🤬🤬🤬🤬

不要.限られた時間で情報を可能な限り伝えなけらばならないプレゼンテーションにおいて,内容のないスライドは不必要

発表終了後には質疑応答が行われるのが常だが,質疑応答中に「ご清聴ありがとうございましたスライド」を表示していても無駄である. 質疑応答中は発表のまとめスライドを見せて,質問者が質問しやすいようにすべし.

色の数を徒に増やすべからず

  • キレ度3🤬🤬🤬

とっちらかった配色は得てして見づらく,理解の妨げとなる. 用いる色は,

  • 通常の文字で使う黒色
  • 強調したい箇所などで用いるメインカラー
  • メインカラーと対比的に用いたりさらに強調したいときに用いるアクセントカラー

の3色くらいが無難だと思う.

また用途も例えば

  • グッドポイント・メリット・利点などはメインカラーの青
  • 対比的に,バッドポイント・デメリット・欠点などはアクセントカラーの赤

といったように意味を限定して使うべし.青と赤は逆の流儀の人もいる.どちらがマジョリティかは知らない.

ハイコントラストな配色にするべからず   

  • キレ度1🤬

ハイコントラストなスライドは目が疲れるのでコントラストを下げるべし.くすんだ色を用いると目に優しい.

  • 文字の色は真っ黒#000000ではなくこれくらいの黒色#444444(ブログ上では違いが分かりにくい)
  • 背景の色は真っ白#FFFFFFではなくこれくらいの白色#BBBBBB(ブログ上では見づらい)
  • メインカラーの青色は#0000FFではなくこれくらいの青色#204066
  • アクセントカラーの赤色は#FF0000ではなくこれくらいの赤色#801E1E

がいいと思う.

ただし,これはプロジェクターで投影するか液晶で表示するか, 会場の照明の色,個々人の色覚など, 非常に多数の要素に左右されるので,気にしすぎるのもよくないと思う.

日本語フォントのアルファベットを使うべからず

  • キレ度1🤬

游ゴシックなどの美しい日本語フォントですら,ビルトインしているアルファベットは微妙にダサい.英語にきちんと向き合っている欧文フォントを使うべし.

Windowsにデフォルトで入っている素晴らしい欧文フォントにSegoe UI がある.

日本語フォントのギリシャ文字を使うべからず

  • キレ度3🤬🤬🤬

例えばアルファとかオメガとか入力してからギリシャ文字に変換できるが,アルファベット同様ダサいし,環境によっては文字化けが起きる可能性がある

Windowsに標準搭載されているギリシャ文字専用フォントのSymbolを使うべし.

図表で細い線を使うべからず

  • キレ度4🤬🤬🤬🤬

グラフの軸やプロットデータが細かったり,表のグリッド線が細いと見づらい(見えない). 図表は研究発表の最も重要な部分であり,この部分が見づらい(見えない)と伝わるものも伝わらないので,大きく太く作図すべし.

登壇中篇

「○○させて頂きます」と言うべからず

  • キレ度1🤬

「○○いたします」「○○します」と言おう. 「させて頂きます」は目上の人に許可をもらって何かを実行するときに使うべし.

主催者やその他関係者のおかげで自分は発表できているという信念・思想のもと, 「発表させていただきます」と言っているならいいと思う. でも,そこまで考えて「発表させていただきます」と言っている人はいないんじゃないか? 日常会話の話し言葉ならまだしも,研究発表の一言一句には敏感になり,言葉を大切に使うべきだ.

スライドを読み上げるだけの発表をするべからず

  • キレ度3🤬🤬🤬

書いてあることを読むだけなら,聴講者各々がスライドを見れば済む話である. スライドには重要な図表や説明のみを表示し,口頭でそれらの行間を補完するように発表すべし.

「続いて○○についてお話します」と言うべからず

  • キレ度3🤬🤬🤬

スライドのページをめくって「続いて○○についてお話します」,またページをめくって「次は▽▽についてお話します」,またページをめくって「お次に□□についてお話します」...

というように,スライドごとに話がブツ切りになっていると,スライドごとの関係やつながりが見えてこない.一つのストーリーを作るように,前のスライドのおしりと次のスライドの頭がつながるように構成するべし.

登壇者はフラフラするべからず

  • キレ度2🤬🤬

発表内容に集中したいのに視界の端で登壇者がフラフラ動いていると気になるし,自信なさげで頼りない印象を受けてしまう.

せっかくの素晴らしい内容も(この発表たいしたことないんじゃね?)と,その素晴らしさが伝わりにくくなってしまうので,背筋を伸ばしてどっしりと構えることを意識すべきだろう.

登壇者はボソボソ喋るべからず

  • キレ度4🤬🤬🤬🤬

ボソボソ喋ってるとそもそもの内容が聞き取れないので,もっとお腹から声をだすべし. また,マイクを過信するべからず.マイクは適切な距離・適切な声量でないと正しく拡声してくれない.

登壇する前に喉を慣らしておいたり,登壇直後にマイクテストをするのが肝要である.

レーザーポインターを不必要に振り回すべからず

  • キレ度5🤬🤬🤬🤬🤬

注目点を指し示すためにレーザーポインターは頻繁に用いられるが, そもそも注目を集めたいなら,矢印で指し示したり丸で囲んだり資料の側を工夫するべきである. 不必要にレーザーポインターを振り回すのは端的に見づらいので,レーザーポインターは限定的に扱うのが良いだろう.

これだけならキレ度3🤬🤬🤬査定くらいであるが,人の目に入ると危険なのでキレ度5🤬🤬🤬🤬🤬査定. 直ちにやめるべきだと思う.

どうしても使いたいならPowerPointなどのプレゼンテーションソフトに組み込まれているソフトのレーザーポインターを利用するべし.

おわりに

本記事では,筆者がスライド作成や発表登壇中に意識していることを思いつく限り書きました.また思いついた内容があったり,あたらしい気づきがあった場合は適宜修正していきたいです.数年後に見返したときに黒歴史となっていないか心配です.

再度予防線を張っておきますが断っておきますが,これは筆者の専攻である電気電子工学の分野の流儀や筆者個人の好みが多分に含まれているため,鵜呑みにしないでほしいです.

次は最近読んだ本の感想とかを記事にしていけたら楽しいかなと思っています.

ブログ開設

はじめに

X(旧Twitter)(←これ言いたいだけ)で独り言をぶつぶつと書き連ねていては,自分のポストを見た人に変なヤツだと思われるし,文字数制限も煩わしいので,この用途ではSNSよりブログのほうが良いと思い開設することにした.

まずは三日坊主にならないように日記程度のつもりで記事を書いていこうと思う.

初めての投稿記事なので,ブログ名の由来と,ブログを書く目的について書く.

ブログのタイトルの由来

晴耕雨読

田園で世間のわずらわしさを離れて、心穏やかに暮らすこと。晴れた日には田畑を耕し、雨の日には家に引きこもって読書する意から。

晴耕雨読(せいこううどく)とは? 意味・読み方・使い方 - 四字熟語一覧 - goo辞書による.

自分の力ではどうしようもない社会問題から自分の身の回りの諍いまで,俗世には煩悩が多すぎる. 中高生くらいまでなら気づかない振りをできていたが,そろそろ一人の人間として向き合わなきゃいけないという自覚もある.

毎日の生活ではそれらの煩悩に頑張って向き合いつつも,心穏やかに文化的に過ごしたいというささやかな願いを込めて,晴耕雨読というタイトルにした.

ブログを書く目的

日記程度のつもりとはいえ,目的意識に欠けていては砂上の楼閣となるので,まずはブログを書く目的を定め,以降の記事を執筆する際の指針とする.

文章力向上

そもそも長い文章を書くことに慣れておらず,また,論理の包含や話の流れを意識しながら構成・章立てを考えるのが苦手なので,ブログを通して文章を書く練習をする.

センター国語119点だし,学会の予稿や卒論で厳しい添削や指導があったし,これを機に長い文章を書くのに慣れたい.

ちなみに,文章力向上を焦点にあてた書籍として,以下のようなものを読んだことがある.いずれも名著で評価が高く, 文章を書く際の心強い柱となるのでぜひ読んでみてほしい.

思想デトックス

基本的に内向的で,他者と意見を交わすことの少ない生活なので,頭の中でグルグルと自分の考えを巡らせているばかりである. ブログという形で自分の考えや思想を吐き出す場を作ることで,"思想デトックス"を行う.

過去の記事を見直して,自分の考えや思想の変化を自覚出来たら楽しいのかもしれない.黒歴史紙一重であるとも思う.

日記・メモ

味のしなくなったガムのような,無味乾燥で代わり映えのない生活ばかりを送っているので,レアな出来事や重大なイベントの後は折に触れて書いていきたい.趣味のゲームや音楽,漫画などについても感想とか書けたら善き生活を過ごせそうである.

思いついたアイデアや知見もメモとして残しておけたら,自分が後で参照出来て便利だし,有用な知識を備忘録として残す謎の個人ブログの立ち位置もほしいままとできるかもしれない.

おわりに

本記事ではブログを書く目的について,徒然なるままに,PCに向かいて心にうつりゆくよしなしごとを,そこはかとなくタイピングしつくった.

とにかく,まずは三日坊主にならないようにしたい.

コメントも随時受付中,LINEやDMの返信は遅いけれど,コメントの返信は頑張ろうと思う.