- 投稿日:2020-05-22T23:25:16+09:00
Swiftの文について見ていきます
概要
新たにSwiftを学び始めたので、アウトプットも兼ねて、Xcodeの文を見ていきます。
viewController.swiftclass ViewController: UIViewController { @IBOutlet weak var countLabel: UILabel! var count = 0 override func viewDidLoad() { super.viewDidLoad() countLabel.text = "0" } @IBAction func plus(_ sender: Any) { count = count + 1 countLabel.text = String(count) if(count >= 10){ changeTextColor() } } @IBAction func minus(_ sender: Any) { count = count - 1 countLabel.text = String(count) if(count <= 0){ resetColor() } } func changeTextColor(){ countLabel.textColor = .yellow } func resetColor(){ countLabel.textColor = .white } }class ViewController: UIViewController {
@IBOutlet weak var countLabel: UILabel! var count = 0この部分は変数の宣言になります。varとつけて宣言を表明し、その後にcountLabelという変数名をつけています。その後のcount変数を宣言して 0 を代入しています。
override func viewDidLoad() { super.viewDidLoad() countLabel.text = "0" }この部分はアプリを開いた時に自動的に読み込まれる箇所です。
countLabelにオブジェクト.textをつけてそれに文字型の0を代入して表示しています。@IBAction func plus(_ sender: Any) { count = count + 1 countLabel.text = String(count) if(count >= 10){ changeTextColor() } }この部分はボタンがタッチされた時該当する plusメソッドが動きますが、その処理を記述しています。
countに1を足す処理です。そしてさらに足したcountを文字型に変えて表示しています。
その後のif文はcountが10超えたらchageTextColorというメソッドを読み込むという記述です。@IBAction func minus(_ sender: Any) { count = count - 1 countLabel.text = String(count) if(count <= 0){ resetColor() } }ここはさっきと逆でcountから1引く処理をしています。そしてそれを文字型に変えて表示。if文で0以下になったらresetColorというメソッドが読み込まれるという記述です。
func changeTextColor(){ countLabel.textColor = .yellow } func resetColor(){ countLabel.textColor = .white }最後にこの箇所はメソッドを定義する箇所です。
changeTextColorメソッドでは.textColorオブジェクトを使って文字を黄色に変えています。
resetColorメソッドは同じように文字を白色に変えています。
- 投稿日:2020-05-22T23:01:52+09:00
vimでPython書きたい人へ
対象者
vimを使ってPython書きたい/書いてる人と、カラースキームの編集について知りたい人
ぼくが使っている.vimrc
と、Python用のシンタックススクリプト、最後にカラースキームをご紹介します。目次
vimrc
vimは高機能エディターですが、例えばVisual Studioやjupyter notebookなどと違って、UIやらが(プラグインを用いないと)全く充実してないためなんとなく敷居が高いですよね。
かくいうぼくも大して使いこなせていないので練習あるのみな感じですが...
でもデフォルトのキーバインドでも慣れるとサクサク書けたり、色々自由にカスタマイズできるのがvimのいいところかなぁと最近思ったり思わなかったりしています。
いろんなプラグインがgithubに公開されていますしね。
そう言うことで、今日はぼくが今使っている.vimrc
を紹介します。ここで紹介されている
.vimrc
をコピペして、少しだけカスタマイズしたりしています。
全部コピペで.vimrc
を作りたい!という時はここまでやってからコピペして調整してください。
.vimrc
.vimrcset encoding=utf-8 scriptencoding utf-8 " ↑1行目は読み込み時の文字コードの設定 " ↑2行目はVim Script内でマルチバイトを使う場合の設定 " Vim scritptにvimrcも含まれるので、日本語でコメントを書く場合は先頭にこの設定が必要になる "---------------------------------------------------------- " NeoBundle "---------------------------------------------------------- if has('vim_starting') " 初回起動時のみruntimepathにNeoBundleのパスを指定する set runtimepath+=~/.vim/bundle/neobundle.vim/ " NeoBundleが未インストールであればgit cloneする if !isdirectory(expand("~/.vim/bundle/neobundle.vim/")) echo "install NeoBundle..." :call system("git clone git://github.com/Shougo/neobundle.vim ~/.vim/bundle/neobundle.vim") endif endif call neobundle#begin(expand('~/.vim/bundle/')) " インストールするVimプラグインを以下に記述 " NeoBundle自身を管理 NeoBundleFetch 'Shougo/neobundle.vim' " カラースキーム "NeoBundle 'tomasr/molokai' "NeoBundle 'flrnd/plastic.vim' "NeoBundle 'sainnhe/edge' NeoBundle 'cocopon/iceberg.vim' " 花文字 "NeoBundle 'sainnhe/icursive-nerd-font' " カラースキームを調べる NeoBundle 'guns/xterm-color-table.vim' " ステータスラインの表示内容強化 NeoBundle 'itchyny/lightline.vim' " インデントの可視化 NeoBundle 'Yggdroot/indentLine' " 末尾の全角半角空白文字を赤くハイライト NeoBundle 'bronson/vim-trailing-whitespace' " 構文エラーチェック NeoBundle 'scrooloose/syntastic' " 多機能セレクタ NeoBundle 'ctrlpvim/ctrlp.vim' " CtrlPの拡張プラグイン. 関数検索 NeoBundle 'tacahiroy/ctrlp-funky' " CtrlPの拡張プラグイン. コマンド履歴検索 NeoBundle 'suy/vim-ctrlp-commandline' " CtrlPの検索にagを使う NeoBundle 'rking/ag.vim' " プロジェクトに入ってるESLintを読み込む NeoBundle 'pmsorhaindo/syntastic-local-eslint.vim' " pythonコード補完 NeoBundle 'davidhalter/jedi-vim' NeoBundle 'ervandew/supertab' autocmd FileType python setlocal completeopt-=preview let g:SuperTabContextDefaultCompletionType = "context" let g:SuperTabDefaultCompletionType = "<c-n>" "let g:jedi#rename_command = "<c-r>" let g:jedi#force_py_version="3" " vimのlua機能が使える時だけ以下のVimプラグインをインストールする if has('lua') " コードの自動補完 NeoBundle 'Shougo/neocomplete.vim' " スニペットの補完機能 NeoBundle "Shougo/neosnippet" " スニペット集 NeoBundle 'Shougo/neosnippet-snippets' endif call neobundle#end() " ファイルタイプ別のVimプラグイン/インデントを有効にする filetype plugin indent on " 未インストールのVimプラグインがある場合、インストールするかどうかを尋ねてくれるようにする設定 NeoBundleCheck "---------------------------------------------------------- " カラースキーム "---------------------------------------------------------- " カラースキームにmolokaiを設定する "if neobundle#is_installed('molokai') " colorscheme molokai "endif "colorscheme murphy " plasticに設定 "if neobundle#is_installed('plastic') " colorscheme plastic "endif " neonに設定 "if neobundle#is_installed('edge') " set termguicolors " set background=dark " let g:edge_style = 'neon' " let g:edge_disable_italic_comment = 1 " let g:edge_enable_italic = 0 " colorscheme edge "endif " icebergに設定 if neobundle#is_installed('iceberg.vim') colorscheme iceberg endif set t_Co=256 " iTerm2など既に256色環境なら無くても良い syntax enable " 構文に色を付ける "---------------------------------------------------------- " 文字 "---------------------------------------------------------- set fileencoding=utf-8 " 保存時の文字コード set fileencodings=ucs-boms,utf-8,euc-jp,cp932 " 読み込み時の文字コードの自動判別. 左側が優先される set fileformats=unix,dos,mac " 改行コードの自動判別. 左側が優先される set ambiwidth=double " □や○文字が崩れる問題を解決 "---------------------------------------------------------- " ステータスライン "---------------------------------------------------------- set laststatus=2 " ステータスラインを常に表示 set showmode " 現在のモードを表示 set showcmd " 打ったコマンドをステータスラインの下に表示 set ruler " ステータスラインの右側にカーソルの位置を表示する "---------------------------------------------------------- " コマンドモード "---------------------------------------------------------- set wildmenu " コマンドモードの補完 set history=5000 " 保存するコマンド履歴の数 "---------------------------------------------------------- " タブ・インデント "---------------------------------------------------------- set expandtab " タブ入力を複数の空白入力に置き換える set tabstop=2 " 画面上でタブ文字が占める幅 set softtabstop=2 " 連続した空白に対してタブキーやバックスペースキーでカーソルが動く幅 set autoindent " 改行時に前の行のインデントを継続する set smartindent " 改行時に前の行の構文をチェックし次の行のインデントを増減する set shiftwidth=2 " smartindentで増減する幅 "---------------------------------------------------------- " 文字列検索 "---------------------------------------------------------- set incsearch " インクリメンタルサーチ. 1文字入力毎に検索を行う set ignorecase " 検索パターンに大文字小文字を区別しない set smartcase " 検索パターンに大文字を含んでいたら大文字小文字を区別する set hlsearch " 検索結果をハイライト " ESCキー2度押しでハイライトの切り替え nnoremap <silent><Esc><Esc> :<C-u>set nohlsearch!<CR> "---------------------------------------------------------- " カーソル "---------------------------------------------------------- set whichwrap=b,s,h,l,<,>,[,],~ " カーソルの左右移動で行末から次の行の行頭への移動が可能になる set number " 行番号を表示 set cursorline " カーソルラインをハイライト " 行が折り返し表示されていた場合、行単位ではなく表示行単位でカーソルを移動する nnoremap j gj nnoremap k gk nnoremap <down> gj nnoremap <up> gk " バックスペースキーの有効化 set backspace=indent,eol,start "---------------------------------------------------------- " カッコ・タグの対応 "---------------------------------------------------------- set showmatch " 括弧の対応関係を一瞬表示する set matchtime=3 set matchpairs& matchpairs+=<:> source $VIMRUNTIME/macros/matchit.vim " Vimの「%」を拡張する "---------------------------------------------------------- " マウスでカーソル移動とスクロール "---------------------------------------------------------- if has('mouse') set mouse=a if has('mouse_sgr') set ttymouse=sgr elseif v:version > 703 || v:version is 703 && has('patch632') set ttymouse=sgr else set ttymouse=xterm2 endif endif "---------------------------------------------------------- " クリップボードからのペースト "---------------------------------------------------------- " 挿入モードでクリップボードからペーストする時に自動でインデントさせないようにする if &term =~ "xterm" let &t_SI .= "\e[?2004h" let &t_EI .= "\e[?2004l" let &pastetoggle = "\e[201~" function XTermPasteBegin(ret) set paste return a:ret endfunction inoremap <special> <expr> <Esc>[200~ XTermPasteBegin("") endif "---------------------------------------------------------- " ファイル管理 "---------------------------------------------------------- " バックアップファイルやスワップファイルを作成しない set nowritebackup set nobackup set noswapfile "---------------------------------------------------------- " 表示関係 "---------------------------------------------------------- set list " 不可視文字の可視化 set wrap " 長いテキストの折り返し set colorcolumn=100 "100文字目にラインを入れる " スクリーンベルの無効化 set t_vb= set novisualbell " 不可視文字をUnicodeで綺麗に set listchars=tab:»-,trail:-,extends:»,precedes:«,nbsp:%,eol:↲ "---------------------------------------------------------- " マクロおよびキー設定 "---------------------------------------------------------- inoremap jj <Esc> " 入力モード中に素早くjjと入力した場合はESCとみなす " 検索語にジャンプした検索単語を画面中央に持ってくる nnoremap n nzz nnoremap N Nzz nnoremap * *zz nnoremap # #zz nnoremap g* g*zz nnoremap g# g#zz vnoremap v $h " vを二回で行末まで選択 " TABで対応ペアにジャンプ nnoremap <Tab> % vnoremap <Tab> % " Shift + 矢印でウィンドウサイズを変更 "nnoremap <S-Left> <C-w><<CR> "nnoremap <S-Right> <C-w>><CR> "nnoremap <S-Up> <C-w>-<CR> "nnoremap <S-Down> <C-w>+<CR> " 矢印2回押しで行頭・行末へ移動 inoremap <S-Left><S-Left> <Esc>_i inoremap <S-Right><S-Right> <Esc>$i<Right> "---------------------------------------------------------- " neocomplete・neosnippetの設定 "---------------------------------------------------------- if neobundle#is_installed('neocomplete.vim') " Vim起動時にneocompleteを有効にする let g:neocomplete#enable_at_startup = 1 " smartcase有効化. 大文字が入力されるまで大文字小文字の区別を無視する let g:neocomplete#enable_smart_case = 1 " 3文字以上の単語に対して補完を有効にする let g:neocomplete#min_keyword_length = 3 " 区切り文字まで補完する let g:neocomplete#enable_auto_delimiter = 1 " 1文字目の入力から補完のポップアップを表示 let g:neocomplete#auto_completion_start_length = 1 " バックスペースで補完のポップアップを閉じる inoremap <expr><BS> neocomplete#smart_close_popup()."<C-h>" " エンターキーで補完候補の確定. スニペットの展開もエンターキーで確定 imap <expr><CR> neosnippet#expandable() ? "<Plug>(neosnippet_expand_or_jump)" : pumvisible() ? "<C-y>" : "<CR>" " タブキーで補完候補の選択. スニペット内のジャンプもタブキーでジャンプ imap <expr><TAB> pumvisible() ? "<C-n>" : neosnippet#jumpable() ? "<Plug>(neosnippet_expand_or_jump)" : "<TAB>" endif "---------------------------------------------------------- " Syntastic "---------------------------------------------------------- " 構文エラー行に「>>」を表示 let g:syntastic_enable_signs = 1 " 他のVimプラグインと競合するのを防ぐ let g:syntastic_always_populate_loc_list = 1 " 構文エラーリストを非表示 let g:syntastic_auto_loc_list = 0 " ファイルを開いた時に構文エラーチェックを実行する let g:syntastic_check_on_open = 1 " 「:wq」で終了する時も構文エラーチェックする let g:syntastic_check_on_wq = 1 " Javascript用. 構文エラーチェックにESLintを使用 let g:syntastic_javascript_checkers=['eslint'] " Python用. 構文エラーチェックにpep8とpyflakesを使用 let g:syntastic_python_checkers=['pep8', 'pyflakes'] " Javascript, python以外は構文エラーチェックをしない let g:syntastic_mode_map = { 'mode': 'passive', \ 'active_filetypes': ['javascript', 'python'], \ 'passive_filetypes': [] } "---------------------------------------------------------- " CtrlP "---------------------------------------------------------- let g:ctrlp_match_window = 'order:ttb,min:20,max:20,results:100' " マッチウインドウの設定. 「下部に表示, 大きさ20行で固定, 検索結果100件」 let g:ctrlp_show_hidden = 1 " .(ドット)から始まるファイルも検索対象にする let g:ctrlp_types = ['fil'] "ファイル検索のみ使用 let g:ctrlp_extensions = ['funky', 'commandline'] " CtrlPの拡張として「funky」と「commandline」を使用 " CtrlPCommandLineの有効化 command! CtrlPCommandLine call ctrlp#init(ctrlp#commandline#id()) " CtrlPFunkyの絞り込み検索設定 let g:ctrlp_funky_matchtype = 'path' if executable('ag') let g:ctrlp_use_caching=0 " CtrlPのキャッシュを使わない let g:ctrlp_user_command='ag %s -i --hidden -g ""' " 「ag」の検索設定 endif "---------------------------------------------------------- " カラースキーム編集用 "---------------------------------------------------------- " ハイライトグループを知るコマンド:SyntaxInfoを実装 function! s:get_syn_id(transparent) let synid = synID(line("."), col("."), 1) if a:transparent return synIDtrans(synid) else return synid endif endfunction function! s:get_syn_attr(synid) let name = synIDattr(a:synid, "name") let ctermfg = synIDattr(a:synid, "fg", "cterm") let ctermbg = synIDattr(a:synid, "bg", "cterm") let guifg = synIDattr(a:synid, "fg", "gui") let guibg = synIDattr(a:synid, "bg", "gui") return { \ "name": name, \ "ctermfg": ctermfg, \ "ctermbg": ctermbg, \ "guifg": guifg, \ "guibg": guibg} endfunction function! s:get_syn_info() let baseSyn = s:get_syn_attr(s:get_syn_id(0)) echo "name: " . baseSyn.name . \ " ctermfg: " . baseSyn.ctermfg . \ " ctermbg: " . baseSyn.ctermbg . \ " guifg: " . baseSyn.guifg . \ " guibg: " . baseSyn.guibg let linkedSyn = s:get_syn_attr(s:get_syn_id(1)) echo "link to" echo "name: " . linkedSyn.name . \ " ctermfg: " . linkedSyn.ctermfg . \ " ctermbg: " . linkedSyn.ctermbg . \ " guifg: " . linkedSyn.guifg . \ " guibg: " . linkedSyn.guibg endfunction command! SyntaxInfo call s:get_syn_info()初めての方へ
初めてじゃない方はこちらまでスキップしてください。
とりあえず
.vimrc
を作りましょう。$ cd $ vi .vimrc「え、vimの起動コマンドって
vim
じゃなくてvi
なの?」と思うかもしれませんが、少なくとも現在ではどちらも同じコマンドと見なしていいでしょう。とりあえずこれでvimで
.vimrc
を開いた状態になってると思います。
vimは慣れないとなかなか難しいと思うので、とりあえず初歩中の初歩な基礎理解とコマンドだけ紹介します。基礎理解
vimにはいくつかモードがあります。
- ノーマルモード(コマンド入力)
- インサートモード(テキスト編集)
- ビジュアルモード(範囲選択)
ノーマルモードはvimでコマンドを入力したりするモードです。
vimでファイルを開いた時はこのモードになります。
他のモードの時はEsc
を押すとこのモードになります。
インサートモードは文章やコード自体を書き換えるためのモードです。
ノーマルモードでi
やo
などと入力するとこのモードになりテキストを編集できるようになります。
ビジュアルモードは範囲選択をするモードです。
ノーマルモードでv
などと入力するとこのモードになります。
最初はあまり使わないかもしれません。コマンド
とりあえず本記事では次のコマンドだけ頭に入れていればOKだと思います。
足りなければ随時ググってください。ノーマルモードでのコマンド
1 2 i インサートモードに変更 :w 保存 :q vimを終了する :wq 保存してvimを終了する dd 1行削除 yy 1行コピー p 貼り付け(vim内からvim内へのみ) その他のモードでのコマンド
1 2 Esc ノーマルモードに戻る 最初の設定
.vimrc
の先頭には次のスクリプトを書きましょう。
日本語を有効化するためのスクリプトです。.vimrcset encoding=utf-8 scriptencoding utf-8
.vimrc
を初めて書く場合はとりあえずここまで書いてEsc
を押してノーマルモードにし、:wq
で保存して閉じましょう。
改めて開き直せば日本語が有効になります。クリップボード経由のコピペ有効化
コピペで全部済ませたい人はここまでは手動でやってからにしましょう。
普通にコピペするとめんどくさいことになるはずです。
やっちゃった場合、修正が面倒ならノーマルモードで:q!
と入力して保存せず閉じましょう。
コピペ有効化
.vimrc"---------------------------------------------------------- " クリップボードからのペースト "---------------------------------------------------------- " 挿入モードでクリップボードからペーストする時に自動でインデントさせないようにする if &term =~ "xterm" let &t_SI .= "\e[?2004h" let &t_EI .= "\e[?2004l" let &pastetoggle = "\e[201~" function XTermPasteBegin(ret) set paste return a:ret endfunction inoremap <special> <expr> <Esc>[200~ XTermPasteBegin("") endifこれでクリップボードからコピペできるようになります。
つまりインターネットのサイトとかから文章などをコピーしてvimで開いてるファイルにペーストできるようになります。便利!プラグイン管理の
NeoBundle
NeoBundle
はもうずいぶん前に開発終了が宣言されてるみたいですね。
開発者はdein
をオススメしているようです。
希望者はここなどを参考に書き換えてください。
ぼくもそのうち気が向いたら移行するかもしれないのでその時はまた記事を書くかも...
NeoBundle
.vimrc"---------------------------------------------------------- " NeoBundle "---------------------------------------------------------- if has('vim_starting') " 初回起動時のみruntimepathにNeoBundleのパスを指定する set runtimepath+=~/.vim/bundle/neobundle.vim/ " NeoBundleが未インストールであればgit cloneする if !isdirectory(expand("~/.vim/bundle/neobundle.vim/")) echo "install NeoBundle..." :call system("git clone git://github.com/Shougo/neobundle.vim ~/.vim/bundle/neobundle.vim") endif endif call neobundle#begin(expand('~/.vim/bundle/')) " インストールするVimプラグインを以下に記述 " NeoBundle自身を管理 NeoBundleFetch 'Shougo/neobundle.vim' " カラースキーム "NeoBundle 'tomasr/molokai' "NeoBundle 'flrnd/plastic.vim' "NeoBundle 'sainnhe/edge' NeoBundle 'cocopon/iceberg.vim' " 花文字 "NeoBundle 'sainnhe/icursive-nerd-font' " カラースキームを調べる NeoBundle 'guns/xterm-color-table.vim' " ステータスラインの表示内容強化 NeoBundle 'itchyny/lightline.vim' " インデントの可視化 NeoBundle 'Yggdroot/indentLine' " 末尾の全角半角空白文字を赤くハイライト NeoBundle 'bronson/vim-trailing-whitespace' " 構文エラーチェック NeoBundle 'scrooloose/syntastic' " 多機能セレクタ NeoBundle 'ctrlpvim/ctrlp.vim' " プロジェクトに入ってるESLintを読み込む NeoBundle 'pmsorhaindo/syntastic-local-eslint.vim' " CtrlPの拡張プラグイン. 関数検索 NeoBundle 'tacahiroy/ctrlp-funky' " CtrlPの拡張プラグイン. コマンド履歴検索 NeoBundle 'suy/vim-ctrlp-commandline' " CtrlPの検索にagを使う NeoBundle 'rking/ag.vim' " pythonコード補完 NeoBundle 'davidhalter/jedi-vim' NeoBundle 'ervandew/supertab' autocmd FileType python setlocal completeopt-=preview let g:SuperTabContextDefaultCompletionType = "context" let g:SuperTabDefaultCompletionType = "<c-n>" "let g:jedi#rename_command = "<c-r>" let g:jedi#force_py_version="3" " vimのlua機能が使える時だけ以下のVimプラグインをインストールする if has('lua') " コードの自動補完 NeoBundle 'Shougo/neocomplete.vim' " スニペットの補完機能 NeoBundle "Shougo/neosnippet" " スニペット集 NeoBundle 'Shougo/neosnippet-snippets' endif call neobundle#end() " ファイルタイプ別のVimプラグイン/インデントを有効にする filetype plugin indent on " 未インストールのVimプラグインがある場合、インストールするかどうかを尋ねてくれるようにする設定 NeoBundleCheck各プラグインの説明は大体ここにウルトラ丁寧な説明が乗っていますので省略しながら説明します。
NeoBundle
本体関係NeoBundle本体に関係するところを抜き出します。
それぞれの動作はコメントにある通りですね。
本体関係
.vimrcif has('vim_starting') " 初回起動時のみruntimepathにNeoBundleのパスを指定する set runtimepath+=~/.vim/bundle/neobundle.vim/ " NeoBundleが未インストールであればgit cloneする if !isdirectory(expand("~/.vim/bundle/neobundle.vim/")) echo "install NeoBundle..." :call system("git clone git://github.com/Shougo/neobundle.vim ~/.vim/bundle/neobundle.vim") endif endif call neobundle#begin(expand('~/.vim/bundle/')) " インストールするVimプラグインを以下に記述 " NeoBundle自身を管理 NeoBundleFetch 'Shougo/neobundle.vim' ... call neobundle#end() " ファイルタイプ別のVimプラグイン/インデントを有効にする filetype plugin indent on " 未インストールのVimプラグインがある場合、インストールするかどうかを尋ねてくれるようにする設定 NeoBundleCheckカラースキーム
カラースキームは個人的に試したものの残骸がコメントアウトされています...
molokai
は有名ですね。
ただ、個人的にはicebergが気に入りました。
また、これをぼくにとって見やすいように少しだけカスタマイズしたpycebergも後ほど紹介させていただきます(ダイマ)。.vimrc" カラースキーム "NeoBundle 'tomasr/molokai' "NeoBundle 'flrnd/plastic.vim' "NeoBundle 'sainnhe/edge' NeoBundle 'cocopon/iceberg.vim'有効化の方法はまた後ほど紹介します。
花文字
花文字はなぜか使えませんでした。
かっこいいから使いたかった。
色々調べたのですが、文字列の背景がハイライトされるだけでした...
どなたか情報あれば教えてください泣.vimrc" 花文字 "NeoBundle 'sainnhe/icursive-nerd-font'カラースキームを調べる
詳しくはこちら
使用できるカラーとかが一覧として表示できるコマンド:XtermColorTable
が使えるようになります。
カラースキームの色調整に大いに役立ちます。.vimrc" カラースキームを調べる NeoBundle 'guns/xterm-color-table.vim'ステータスラインの表示内容強化
詳しくはこちら
まあ要するに表示される情報が増えるのでありがたいってことです。.vimrc" ステータスラインの表示内容強化 NeoBundle 'itchyny/lightline.vim'ステータスラインを有効にする必要がありますのでここを参考にしてください。
インデント可視化
そのままです。インデントが見えるようになります。
どんな言語でもインデントラインは重要ですよね〜。.vimrc" インデントの可視化 NeoBundle 'Yggdroot/indentLine'不要なスペースをハイライト
コードに紛れる空白文字を赤のハイライトで見えるようにします。
スペースあるせいでコンパイルできない!なんてこともあるので大変ありがたいですね。
さらにさらに、なんと:FixWhitespace
というコマンドでハイライトされた不要なスペースを一括削除できたりもします!
まあこれに頼りすぎず、普段から丁寧なコーディングをしましょう。.vimrc" 末尾の全角半角空白文字を赤くハイライト NeoBundle 'bronson/vim-trailing-whitespace'構文エラーチェック
動作はこちらを見たらわかります。
文法の間違いがあれば教えてくれる感じですね。.vimrc" 構文エラーチェック NeoBundle 'scrooloose/syntastic' " プロジェクトに入ってるESLintを読み込む NeoBundle 'pmsorhaindo/syntastic-local-eslint.vim'単体ではPythonの構文チェックしてくれないのでここを見てください。
多機能セレクタ
ファイルの検索とかバッファの検索とかしてくれるプラグインですね。特に使ってない気がする...
まだまだ修行が足りないということなんでしょうか....vimrc" 多機能セレクタ NeoBundle 'ctrlpvim/ctrlp.vim' " CtrlPの拡張プラグイン. 関数検索 NeoBundle 'tacahiroy/ctrlp-funky' " CtrlPの拡張プラグイン. コマンド履歴検索 NeoBundle 'suy/vim-ctrlp-commandline' " CtrlPの検索にagを使う NeoBundle 'rking/ag.vim'これに関連するCtrlPの設定はこちら
コード補完
コーディングの味方、コード補完ですね。
そういえばneocomplete
とか別になくてもjedi-vim
使ってるしいいのではないかと思ったけど、別にあっても困ってないから置いています。
そのうち整理するかも。
コード補完
.vimrc" pythonコード補完 NeoBundle 'davidhalter/jedi-vim' NeoBundle 'ervandew/supertab' autocmd FileType python setlocal completeopt-=preview let g:SuperTabContextDefaultCompletionType = "context" let g:SuperTabDefaultCompletionType = "<c-n>" "let g:jedi#rename_command = "<c-r>" let g:jedi#force_py_version="3" " vimのlua機能が使える時だけ以下のVimプラグインをインストールする if has('lua') " コードの自動補完 NeoBundle 'Shougo/neocomplete.vim' " スニペットの補完機能 NeoBundle "Shougo/neosnippet" " スニペット集 NeoBundle 'Shougo/neosnippet-snippets' endif
neocomplete
の設定はここカラースキームの有効化
カラースキームの有効化です。
例の如くコメントアウトしてる部分は残骸です。
好きなやつを使ってください。
カラースキーム設定集
.vimrc"---------------------------------------------------------- " カラースキーム "---------------------------------------------------------- " カラースキームにmolokaiを設定する "if neobundle#is_installed('molokai') " colorscheme molokai "endif "colorscheme murphy " plasticに設定 "if neobundle#is_installed('plastic') " colorscheme plastic "endif " neonに設定 "if neobundle#is_installed('edge') " set termguicolors " set background=dark " let g:edge_style = 'neon' " let g:edge_disable_italic_comment = 1 " let g:edge_enable_italic = 0 " colorscheme edge "endif " icebergに設定 if neobundle#is_installed('iceberg.vim') colorscheme iceberg endif set t_Co=256 " iTerm2など既に256色環境なら無くても良い syntax enable " 構文に色を付けるpycebergもぜひ見てみてください!!
(ダイマ2回目)
導入などの紹介はこちら文字コードの設定
文字コードに関する設定集です。
.vimrc"---------------------------------------------------------- " 文字 "---------------------------------------------------------- set fileencoding=utf-8 " 保存時の文字コード set fileencodings=ucs-boms,utf-8,euc-jp,cp932 " 読み込み時の文字コードの自動判別. 左側が優先される set fileformats=unix,dos,mac " 改行コードの自動判別. 左側が優先される set ambiwidth=double " □や○文字が崩れる問題を解決ステータスラインの有効化
ステータスライン(vimエディタの下部)を有効にします。
"---------------------------------------------------------- " ステータスライン "---------------------------------------------------------- set laststatus=2 " ステータスラインを常に表示 set showmode " 現在のモードを表示 set showcmd " 打ったコマンドをステータスラインの下に表示 set ruler " ステータスラインの右側にカーソルの位置を表示するコマンドモードの設定
ノーマルモードでコマンドを色々打ちますが、それをアシストしてくれる機能です。
コマンド履歴はもっと少なくても多分何も困らないでしょう。.vimrc"---------------------------------------------------------- " コマンドモード "---------------------------------------------------------- set wildmenu " コマンドモードの補完 set history=5000 " 保存するコマンド履歴の数タブやインデントの設定
タブやインデント、読みやすいコードを書く上では超重要ですね。
個人的にインデント幅が大きすぎると見にくいと感じるので2
にしていますが、なぜかPythonコードを書いてる時は勝手に4
になってしまいます。
まあPythonは暗黙の了解でインデント幅は4みたいな風潮があるのでいいですが。
インデントとか可視化されますしね。.vimrc"---------------------------------------------------------- " タブ・インデント "---------------------------------------------------------- set expandtab " タブ入力を複数の空白入力に置き換える set tabstop=2 " 画面上でタブ文字が占める幅 set softtabstop=2 " 連続した空白に対してタブキーやバックスペースキーでカーソルが動く幅 set autoindent " 改行時に前の行のインデントを継続する set smartindent " 改行時に前の行の構文をチェックし次の行のインデントを増減する set shiftwidth=2 " smartindentで増減する幅文字列検索
こちらも重要設定ですね。
文字列検索が便利になります。.vimrc"---------------------------------------------------------- " 文字列検索 "---------------------------------------------------------- set incsearch " インクリメンタルサーチ. 1文字入力毎に検索を行う set ignorecase " 検索パターンに大文字小文字を区別しない set smartcase " 検索パターンに大文字を含んでいたら大文字小文字を区別する set hlsearch " 検索結果をハイライト " ESCキー2度押しでハイライトの切り替え nnoremap <silent><Esc><Esc> :<C-u>set nohlsearch!<CR>ちなみに文字列検索は
/(検索したい文字列)
文字列置換は:%s/(置換対象の文字列)/(置換後の文字列)
が基本です。カーソル移動など
vimではノーマルモードなら
h, j, k, l
でそれぞれ左 下 上 右
と移動できますが、こういったコマンドでの移動の際、長いコードを書いたために1行が折り返して表示されていると、例えばj
で移動すると見た目での1行下ではなく、次の行にカーソルが移動してしまったりします。
ここではそれを解消したり、カーソルラインをハイライトしたりの設定をしています。
カーソル関連
/.vimrc"---------------------------------------------------------- " カーソル "---------------------------------------------------------- set whichwrap=b,s,h,l,<,>,[,],~ " カーソルの左右移動で行末から次の行の行頭への移動が可能になる set number " 行番号を表示 set cursorline " カーソルラインをハイライト " 行が折り返し表示されていた場合、行単位ではなく表示行単位でカーソルを移動する nnoremap j gj nnoremap k gk nnoremap <down> gj nnoremap <up> gk " バックスペースキーの有効化 set backspace=indent,eol,start括弧やタグの対応
コーディング中に対応する括弧が一瞬光ります。
括弧をたくさん書くときに便利です。.vimrc"---------------------------------------------------------- " カッコ・タグの対応 "---------------------------------------------------------- set showmatch " 括弧の対応関係を一瞬表示する set matchtime=3 set matchpairs& matchpairs+=<:> source $VIMRUNTIME/macros/matchit.vim " Vimの「%」を拡張するマウス有効化
なんと初期設定のvimではマウスが使えません。
トラックパッドも使えません。
ということで設定しましょう。
マウス有効化
.vimrc"---------------------------------------------------------- " マウスでカーソル移動とスクロール "---------------------------------------------------------- if has('mouse') set mouse=a if has('mouse_sgr') set ttymouse=sgr elseif v:version > 703 || v:version is 703 && has('patch632') set ttymouse=sgr else set ttymouse=xterm2 endif endifファイル管理
vimでファイルを編集すると自動でバックアップファイルやスワップファイルを作成するのですが、別に不要なのでオフにしておきます。
(ファイルのバックアップとかが必要ならそもそもgitとか使った方がいいと思ってます).vimrc"---------------------------------------------------------- " ファイル管理 "---------------------------------------------------------- " バックアップファイルやスワップファイルを作成しない set nowritebackup set nobackup set noswapfile表示関係
空白とか改行とかタブとかを可視化します。
あと一文が長くなったら折り返します。
表示関係設定
.vimrc"---------------------------------------------------------- " 表示関係 "---------------------------------------------------------- set list " 不可視文字の可視化 set wrap " 長いテキストの折り返し set colorcolumn=100 "100文字目にラインを入れる " スクリーンベルの無効化 set t_vb= set novisualbell " 不可視文字をUnicodeで綺麗に set listchars=tab:»-,trail:-,extends:»,precedes:«,nbsp:%,eol:↲マクロとキー設定
ここではデフォルトのキーバインドを直感的に使えるようにオーバーライドしたり新しく設定したりしています。
お好みで追加したり削除したりしてくださいね。
nnoremap
はノーマルモードでのキー設定inoremap
はインサートモードでのキー設定vnoremap
はビジュアルモードでのキー設定<S>
はShift
キー<C>
はCtrl
キー
マクロとキー設定集
.vimrc"---------------------------------------------------------- " マクロおよびキー設定 "---------------------------------------------------------- inoremap jj <Esc> " 入力モード中に素早くjjと入力した場合はESCとみなす " 検索語にジャンプした検索単語を画面中央に持ってくる nnoremap n nzz nnoremap N Nzz nnoremap * *zz nnoremap # #zz nnoremap g* g*zz nnoremap g# g#zz vnoremap v $h " vを二回で行末まで選択 " TABで対応ペアにジャンプ nnoremap <Tab> % vnoremap <Tab> % " Shift + 矢印でウィンドウサイズを変更 "nnoremap <S-Left> <C-w><<CR> "nnoremap <S-Right> <C-w>><CR> "nnoremap <S-Up> <C-w>-<CR> "nnoremap <S-Down> <C-w>+<CR> " 矢印2回押しで行頭・行末へ移動 inoremap <S-Left><S-Left> <Esc>_i inoremap <S-Right><S-Right> <Esc>$i<Right>
neocomplete
の設定
neocomplete
の設定と、neosnippet
の設定です。
他にも色々オプションあるみたいですが、大体下記で事足りるのではないでしょうか。
詳しくはをご覧ください。
コード補完設定
.vimrc"---------------------------------------------------------- " neocomplete・neosnippetの設定 "---------------------------------------------------------- if neobundle#is_installed('neocomplete.vim') " Vim起動時にneocompleteを有効にする let g:neocomplete#enable_at_startup = 1 " smartcase有効化. 大文字が入力されるまで大文字小文字の区別を無視する let g:neocomplete#enable_smart_case = 1 " 3文字以上の単語に対して補完を有効にする let g:neocomplete#min_keyword_length = 3 " 区切り文字まで補完する let g:neocomplete#enable_auto_delimiter = 1 " 1文字目の入力から補完のポップアップを表示 let g:neocomplete#auto_completion_start_length = 1 " バックスペースで補完のポップアップを閉じる inoremap <expr><BS> neocomplete#smart_close_popup()."<C-h>" " エンターキーで補完候補の確定. スニペットの展開もエンターキーで確定 imap <expr><CR> neosnippet#expandable() ? "<Plug>(neosnippet_expand_or_jump)" : pumvisible() ? "<C-y>" : "<CR>" " タブキーで補完候補の選択. スニペット内のジャンプもタブキーでジャンプ imap <expr><TAB> pumvisible() ? "<C-n>" : neosnippet#jumpable() ? "<Plug>(neosnippet_expand_or_jump)" : "<TAB>" endif
Syntastic
の設定構文チェック機能の設定集ですね。
ただ、なぜかぼくの環境では動いていないっぽい...?
どこか間違ってそうです...
Syntastic
の設定
.vimrc"---------------------------------------------------------- " Syntastic "---------------------------------------------------------- " 構文エラー行に「>>」を表示 let g:syntastic_enable_signs = 1 " 他のVimプラグインと競合するのを防ぐ let g:syntastic_always_populate_loc_list = 1 " 構文エラーリストを非表示 let g:syntastic_auto_loc_list = 0 " ファイルを開いた時に構文エラーチェックを実行する let g:syntastic_check_on_open = 1 " 「:wq」で終了する時も構文エラーチェックする let g:syntastic_check_on_wq = 1 " Javascript用. 構文エラーチェックにESLintを使用 let g:syntastic_javascript_checkers=['eslint'] " Python用. 構文エラーチェックにpep8とpyflakesを使用 let g:syntastic_python_checkers=['pep8', 'pyflakes'] " Javascript, python以外は構文エラーチェックをしない let g:syntastic_mode_map = { 'mode': 'passive', \ 'active_filetypes': ['javascript', 'python'], \ 'passive_filetypes': [] }ちなみに
pep8
とpyflakes
は$ pip install pep8 pyflakesでインストールできます。
詳しくはこちらCtrlPの設定
多機能セレクタプラグインの設定です。
ファイル検出の設定とかをしています。
CtrlPの設定
.vimrc"---------------------------------------------------------- " CtrlP "---------------------------------------------------------- let g:ctrlp_match_window = 'order:ttb,min:20,max:20,results:100' " マッチウインドウの設定. 「下部に表示, 大きさ20行で固定, 検索結果100件」 let g:ctrlp_show_hidden = 1 " .(ドット)から始まるファイルも検索対象にする let g:ctrlp_types = ['fil'] "ファイル検索のみ使用 let g:ctrlp_extensions = ['funky', 'commandline'] " CtrlPの拡張として「funky」と「commandline」を使用 " CtrlPCommandLineの有効化 command! CtrlPCommandLine call ctrlp#init(ctrlp#commandline#id()) " CtrlPFunkyの絞り込み検索設定 let g:ctrlp_funky_matchtype = 'path' if executable('ag') let g:ctrlp_use_caching=0 " CtrlPのキャッシュを使わない let g:ctrlp_user_command='ag %s -i --hidden -g ""' " 「ag」の検索設定 endifカラースキーム編集用
カラースキーム編集時に、今カーソルを合わせているコードのシンタックスグループなどを教えてくれる便利コマンドです。
:SyntaxInfo
コマンドを使えるようにする
.vimrc"---------------------------------------------------------- " カラースキーム編集用 "---------------------------------------------------------- " ハイライトグループを知るコマンド:SyntaxInfoを実装 function! s:get_syn_id(transparent) let synid = synID(line("."), col("."), 1) if a:transparent return synIDtrans(synid) else return synid endif endfunction function! s:get_syn_attr(synid) let name = synIDattr(a:synid, "name") let ctermfg = synIDattr(a:synid, "fg", "cterm") let ctermbg = synIDattr(a:synid, "bg", "cterm") let guifg = synIDattr(a:synid, "fg", "gui") let guibg = synIDattr(a:synid, "bg", "gui") return { \ "name": name, \ "ctermfg": ctermfg, \ "ctermbg": ctermbg, \ "guifg": guifg, \ "guibg": guibg} endfunction function! s:get_syn_info() let baseSyn = s:get_syn_attr(s:get_syn_id(0)) echo "name: " . baseSyn.name . \ " ctermfg: " . baseSyn.ctermfg . \ " ctermbg: " . baseSyn.ctermbg . \ " guifg: " . baseSyn.guifg . \ " guibg: " . baseSyn.guibg let linkedSyn = s:get_syn_attr(s:get_syn_id(1)) echo "link to" echo "name: " . linkedSyn.name . \ " ctermfg: " . linkedSyn.ctermfg . \ " ctermbg: " . linkedSyn.ctermbg . \ " guifg: " . linkedSyn.guifg . \ " guibg: " . linkedSyn.guibg endfunction command! SyntaxInfo call s:get_syn_info()カラースキームの編集
ぼくはここなどを参考にしました。
vimでコーディングする上でカラースキームって意外と大切だったりします。
明るい色ばかり使っていたら目が疲れますし、全部同じ色だとスペルミスに気づけなかったり、とにかくコーディング効率が悪くなります。
いろんなサイトで「カラースキームといえばこれ!」とか紹介されているのを見たり、既存のカラースキームを探せるサイトとかで自分なりに良さげなのを探してきたりしても、どうにも微妙に納得がいかなかったりしませんか?
ということで、すごく簡単にですがカラースキームの編集方法について説明します。まずは元となるカラースキームを見つけよう
一から自分専用のカラースキームを作るのは心が折れると思いますのでやめときましょう。
今自分の中で一番気に入っているカラースキームを少しずつ編集するだけで十分なものに仕上げることができます。
ぼくはicebergが気に入ったのでこれをもとに少しだけ編集しました。どの部分が気に入らない?
元となるカラースキームを決めたら、どの部分の色が気に入らないか調べましょう。
先に紹介した:SyntaxInfo
でハイライトグループを知ることができますので、それを元に編集します。
以下では例としてPythonStringグループの色を変更します。
このPythonコードは開きっぱなしで!
カラースキームを開く
カラースキームは
NeoBundle
で管理していれば~/.vim/bundle/
の中にあると思います。
今回はiceberg
を編集するので$ vi ~/.vim/bundle/iceberg.vim/colors/iceberg.vimでカラースキームを開きます。
対象のシンタックスグループを検索
vimの文字列検索
/pythonstring
として定義を見てみましょう。
ないですね、はい。
ということは自分で書くしかないわけですね。
どこに書き足してもいいですが、わかりやすいところにしましょう。
今回はカラースキームの色を直接定義している部分の一番最後にします。
書いてみる
書き方は真似すればOK。
何色がある?っていうのはここで紹介した:XtermColorTable
を参考にしましょう。
今回はctermfg=40,guifg=#00df00
を使います。
guifg
の16進数はビジュアルモードで範囲選択すれば見えますよ〜
書けたらとりあえず:w
で保存するだけ保存しましょう。
まだ閉じないように!確認する
ではPythonのコード画面に移りましょう。
:syntax on
と入力すれば新しいカラーが反映されるはずです。
派手すぎますね〜やっぱりやめときましょうこの色、とかなったり、微妙に思った色と違ったりするかもしれないので、また書いてみるに戻って編集し直して確認して〜の繰り返しです。以上でカラースキームの編集方法の説明は終了です!
シンタックスファイル
さて、カラースキーム編集したしバッチリ!と思ってるそこのあなた、もう一つ大事な要素を忘れてますよ!
それはシンタックスファイルの存在です。
シンタックスファイルとは、そのまま文法をまとめたファイルのことです。
vimでPython書くならこれを入れておくべきでしょう。
ここにPythonのシンタックスファイルがありますが、これでは(なぜか)クラスのメソッドなどのアトリビュート(hoge.foo
のfoo
)の色を変えられなかったりします。
ということでぼくがちょっぴり修正したここのpython.vim
をREADME.md
に従って~/.vim/syntax/
に入れましょう。
そうすればアトリビュートも色を変えられるはずです!pyceberg
最後に、本記事を通してダイマしまくったpycebergを宣伝させてもらいます笑
基本はicebergで、少しぼく好みに色を変更したりしたくらいです。
もしよかったら使ってやってください。導入方法は
README.md
に書いてあります。
1番簡単なのは.vimrc
に.vimrcNeoBundle ‘kuroitu/pyceberg’ colorscheme pyceberg
とやるやり方ですかね〜
おわりに
すごく長い記事になりました...
まあ何かの参考にでもなれば幸いです。参考
- 投稿日:2020-05-22T14:44:35+09:00
Macの初期設定 defaults write comandなど
Dock関係
# Dock を自動的に隠す defaults write com.apple.dock autohide -bool true # Dock に標準で入っている全てのアプリを消す、Finder とごみ箱は消えない defaults write com.apple.dock persistent-apps -array # アイコンサイズの設定 defaults write com.apple.dock tilesize -int 25 # Dockの位置を左端、または上端によせる defaults write com.apple.dock pinning -string startアニメーション関係
# ウィンドウを開閉するときのアニメーションを無効 defaults write NSGlobalDomain NSAutomaticWindowAnimationsEnabled -bool false # ウィンドウサイズを調整する際の加速再生 defaults write NSGlobalDomain NSWindowResizeTime -float 0.001 # Finderで情報ウィンドウを開くときのアニメーションを無効 defaults write com.apple.finder DisableAllAnimations -bool true # Quick Lookウィンドウのアニメーションをオフ defaults write -g QLPanelAnimationDuration -float 0 # Dockからアプリを起動するときのアニメーションを無効 defaults write com.apple.dock launchanim -bool falseFinder関係
# 隠しファイルを常にファインダーに表示する defaults write com.apple.finder AppleShowAllFiles -bool YES && killall Finder # スクリーンショットをjpgで保存 defaults write com.apple.screencapture type jpg # 全ての拡張子のファイルを表示する defaults write NSGlobalDomain AppleShowAllExtensions -bool true # スクロールバーを常時表示する defaults write NSGlobalDomain AppleShowScrollBars -string "Always" # Finder のタイトルバーにフルパスを表示する defaults write com.apple.finder _FXShowPosixPathInTitle -bool true # 名前で並べ替えを選択時にディレクトリを前に置くようにする defaults write com.apple.finder _FXSortFoldersFirst -bool true # ゴミ箱を空にする前の警告の無効化 defaults write com.apple.finder WarnOnEmptyTrash -bool false # USB やネットワークストレージに .DS_Store ファイルを作成しない defaults write com.apple.desktopservices DSDontWriteNetworkStores -bool true defaults write com.apple.desktopservices DSDontWriteUSBStores -bool true # クラッシュレポートを無効化する defaults write com.apple.CrashReporter DialogType -string "none" # 未確認のアプリケーションを実行する際のダイアログを無効にする defaults write com.apple.LaunchServices LSQuarantine -bool falseterminal
# UTF-8のみを使用する defaults write com.apple.terminal StringEncodings -array 4App Store
# 他のMacで購入したアプリを自動的にダウンロードする defaults write com.apple.SoftwareUpdate ConfigDataInstall -int 1その他
# キーリピートの高速化 defaults write NSGlobalDomain KeyRepeat -int 2 defaults write NSGlobalDomain InitialKeyRepeat -int 15 # スペルの訂正を無効にする defaults write -g NSAutomaticSpellingCorrectionEnabled -bool false # タップしたときに、クリックとする defaults write -g com.apple.mouse.tapBehavior -int 1 # マウスの速度を速める defaults write -g com.apple.mouse.scaling 5 # テキストエディットをプレーンテキストで使う defaults write com.apple.TextEdit RichText -int 0 # トラックパッドの軌跡の速さ slow 0-3 fast defaults -currentHost write -g com.apple.trackpad.scaling 3 # mouse.scaling マウスの移動速度を速くする defaults write -g com.apple.mouse.scaling 1.5 # 3本指でドラッグの有効化 defaults write com.apple.driver.AppleBluetoothMultitouch.trackpad TrackpadThreeFingerDrag -bool true defaults write com.apple.AppleMultitouchTrackpad TrackpadThreeFingerDrag -bool trueterminalでコメントの有効化
.zshrc
に以下を追記する。setopt interactivecommentsアニメーションと透過性をなくす
参考