ã¹ãã¼ããã©ã³ã§Vimãæä½ããããã«ãã£ã¦ãããã»ãããããã¨
ãã®è¨äºã¯Vim Advent Calendar 2014ã®13æ¥ç®ã®è¨äºã§ãã
12æ¥ç®ã¯okuramasafumiããã«ããVimãä½ç³»çã«å¦ã¶ã¤ããã®ãªã人ã®ããã®Vimè¬åº§âExã³ãã³ãç·¨ã§ããã
ã¯ããã«
ãªãã¹ãã¼ããã©ã³ã§Vimãæä½ããå¿ è¦ãããã®ãï¼
å½ããåã§ãããVimã¯PCç¨ãã¼ãã¼ãã§ã®æä½ç¨ã«æé©åããã¦ãã ä»ã®å ¥åæ©å¨ã§ã®æä½ã¯æ³å®ããã¦ããã¾ããã
ã§ã¯ããªããããªVimãã¹ãã¼ããã©ã³ã§æä½ããå¿ è¦ãããã®ãã ããã«ã¯ä¾ãã°ä»¥ä¸ã®ãããªçç±ãããã¾ãã
- VPSè¨å®ä¸ã ãã©ããåºãããæéã ãå¤ã§ãã¼ãPCãããæéããªããâ¦
- èªé¯ã®èª¿åãããããã®ã§è¨å®ç¢ºèªãã¦åèµ·åããããã§ããã¨2æéã¯å¸°ããªãâ¦
- Vimã触ãããã¦ç¦æçç¶ãã§ãããã§ãä»æºå¡é»è»ã®ä¸ã â¦
ãããªã¨ãã¹ãã¼ããã©ã³(ã¨ãµã¼ãã¼ããããããã®SSHã¯ã©ã¤ã¢ã³ã)ã ããã°è§£æ±ºã§ãããã§ãã
ããããã¹ãã¼ããã©ã³ã§ã³ã³ã½ã¼ã«ããã³Vimãæ±ãã®ã¯ä¸ã é£ãããã¨ã§ããä»åã¯ããããç¶æ³ã®ããã«ã©ã®ããã«åã㦠ããã¹ããããç´¹ä»ãããã¨æãã¾ãã
ãªããBluetoothãã¼ãã¼ãã¯ãã¡ããã両æã使ããªããã㪠ç¶æ³ãæ³å®ãã¦ã話ãã¾ãã (æºå¡é»è»ã®ä¸ã§Bluetoothãã¼ãã¼ãã¯ãã¡ããã両æã¯èªç±ã«ãªããªãã§ããã)
ãªãVimãªã®ãï¼
Vimmerã«ã¨ã£ã¦ã¯å®å ¨ã«æåã§ãããVimmer以å¤ã®æ¹ã«ã¨ã£ã¦ã ä»åæ³å®ããã±ã¼ã¹ã§ã¯Vimã使ãã®ãä¸çªç¾å®çãªè§£ã¨ãªãã¨æãã¾ãã
- 大æµã®ç°å¢(UNIXç³»)ã«Vimã¯ç¢ºå®ã«å ¥ã£ã¦ãã
- Vimãªãã¹ãã¼ããã©ã³ãã¼ãã¼ãã§ãããç¨åº¦ã®æä½ã«èãããæä½ä½ç³»ãåãã¦ãã
2 ã«ã¤ãã¦ã¯å¾è¿°ãã¾ãããã¹ãã¼ããã©ã³ã§ç«¯æ«ã«æ¥ç¶ãã¦ææ¸ãåç §ã»ç·¨éããã㨠æã£ãå ´åã¯ãVimmer以å¤ã®æ¹ãVimã使ããã¨ããããããã¾ãã
ä»å話ããªããã¨
ä»å話ã対象ã¨ããã®ã¯ãSSHã§ã©ããã®ç«¯æ«ã«æ¥ç¶ãã¦Vimãæä½ãã ã±ã¼ã¹ã«éãã¾ãã
ãã®ãããiOSç¨ã®Vimã¢ããªãã Androidç¨ã®Vimã¢ããªã§ ã®è©±ã¯åºã¦ãã¾ããã®ã§ããããããäºæ¿ãã ããã
ä¸æºå
ã¹ãã¼ããã©ã³ã«SSHã¯ã©ã¤ã¢ã³ããå ¥ãã
ä½ã¯ã¨ãããSSHã¯ã©ã¤ã¢ã³ãããªããã°å§ã¾ãã¾ããã SSHã¯ã©ã¤ã¢ã³ãã¯å¥½ããªã¢ããªã使ã£ã¦ãããã°ããã§ãã
ç§ã¯ã¹ãã¼ããã©ã³ãiPhoneãªã®ã§ææã¢ããªã®Prompt ã®ãã¼ã¸ã§ã³1ã使ã£ã¦ãã¾ãã
æ¬é¡ã¨ã¯é¢ä¿ãªãã®ã§ãããä»åè¨äºãæ¸ãã¦ããæã« Promptã®ãã¼ã¸ã§ã³2ãåºã¦ãããã¨ã«æ°ã¥ãã¾ããã ã¹ããã©ã¢ããªã«ãã¦ã¯ãããããé«ãã§ããã ãã¼ã¸ã§ã³1ã«ã¯å¤§åãä¸è©±ã«ãªã£ãã®ã§ ãå¸æ½ã®æå³ã§è³¼å ¥ãããã¨æãã¾ãã ãªããæ¬è¨äºå·çæç¹ã§ã¯ã¾ã ãã¼ã¸ã§ã³2ã使ã£ã¦ããªãããã ãã¼ã¸ã§ã³2ã®ä½¿ãåæã¯ã¾ã ãããã¾ããã
ä»ã®SSHã¯ã©ã¤ã¢ã³ãã使ã£ããã¨ããªãã®ã§ãæ¯è¼ã¯ã§ãã¾ããã Promptã¯ä»¥ä¸ã®ç¹ãæ°ã«å ¥ã£ã¦ã¾ãã
- ç§å¯éµãã¡ã¤ã«ãã¢ããªãã©ã«ãã«çªã£è¾¼ãã§æå®ããã ãã§å ¬ééµæå·æ¹å¼ã§æ¥ç¶ã§ãã
- éå»ã«å®è¡ããã³ãã³ãã®è£å®ããããã¢ããã§è¡¨ç¤ºããã
- (ä»åã¯é¢ä¿ãªãã§ãã) Bluetoothãã¼ãã¼ãã«ã対å¿ãã¦ãã
- ãã¾ãè½ã¡ããããããããå®å®ãã¦ãã
ä¸è¨ã¯ãã¼ã¸ã§ã³1ã®è©ä¾¡ã§ãã
ä»åã¯SSHã¯ã©ã¤ã¢ã³ãã®ç´¹ä»è¨äºã§ã¯ãªãã®ã§ã¹ã¯ãªã¼ã³ã·ã§ãããè²¼ã£ã¦ ç´¹ä»ãçµããã¾ãã
ã¹ãã¼ããã©ã³ã§ã®ã½ããã¦ã§ã¢ãã¼ãã¼ãæä½ã«ãªãã
大ä½ã®äººã¯ã¹ãã¼ããã©ã³ã§ã®æä½ã«æ £ãã¦ããã¨æãã¾ããã ã¹ãã¼ããã©ã³ã§ã®ãã¼ã¿ã¤ãã«æ £ãã¦ããªã人ã¯ä»¥ä¸ã®ã¢ããªãªã©ã§ ç·´ç¿ãç©ãã§ããã¨ãããã¨æãã¾ãã å½ç¶ã§ããã¹ãã¼ããã©ã³ã§ã®ãã¼ã¿ã¤ãããã¼ã¤ããªããã°ã ã¹ãã¼ããã©ã³ã§ã®Vimæä½ããã¼ã¤ããªããã®ã«ãªãã¾ãã
ã¿ã¤ãã³ã°ã®ç¥æ§ iOSç
ã¿ã¤ãã³ã°ã®ç¥æ§ Androidç
ç·´ç¿ããéã¯ãæ¥æ¬èªå ¥åã§ã¯ãªãè¨èªãEnglishã§ç·´ç¿ãã¾ãããã 端æ«æä½ã§ã¯æ¥æ¬èªå ¥åé度ã¯ãã¾ãé¢ä¿ãªãã®ã§ã
ãªããçæã§æä½ããã®ã§ããã°ãããªãã¯å ¥åããå§ãã§ãã ãªããã¨qwertyã®ã½ããã¦ã§ã¢ãã¼ãã¼ããããè¥å¹²æ©ãã¿ã¤ãåºæ¥ã¾ãã (ã¨æã£ã¦è©¦ãã¦ã¿ããã©å®éãã³ãã³ãããã§ãã⦠ãã ãæ¥æ¬èªå ¥åã§ããã°æ £ããã¨ããªãã¯å ¥åã®æ¹æç¶ãæ©ãã§ãã æ £ãã¦ããæ¹ã使ãã°ãããã¨æãã¾ãã)
åèã¾ã§ã«ç§ã®ã¿ã¤ãæ績ãè¼ãã¦ããã¾ããä¸ãããªãã¯å ¥åãä¸ãqwertyã§ãã ã©ã¡ããå©ãæ親æã®ã¿ã§æä½ãã¦ãã¾ãã (ã»ã¨ãã©å¤ããã¾ãããâ¦)
æï¼ã¤ã§Vimãæä½ããããã®è¨å®
ãã¦ããããããæ¬é¡ã§ãã
ã¨è¨ã£ã¦ããå®ã¯æ®éã«PCç¨ãã¼ãã¼ãã§Vimãæä½ããæ㨠æèãããã¨ã¯ããã¾ã§å¤ããã¾ããã
ãã ãã¹ãã¼ããã©ã³ã§æä½ããã¨ããæ§è³ªä¸ãããå¼·ãæèããã»ããããã㨠ããã¤ãããã¾ãã ã¾ããã¹ãã¼ããã©ã³ã®ã½ããã¦ã§ã¢ãã¼ãã¼ãã®æ§è³ªãªã©ã èæ ®ã«å ¥ããå¿ è¦ãããã¾ãã
Vimã®åºç¤ãå¿ å®ã«
æè¿ã®ã¹ãã¼ããã©ã³ã¯é«æ§è½ã ãããããã¯ã¼ã¯ãé«éãªã®ã§ ããã¾ã§æ°ã«ããªãããããã¾ããããã¹ãã¼ããã©ã³ã§ã®SSHæ¥ç¶ã¯ã ãªã¢ã«ã¿ã¤ã ã«ã¬ã¹ãã³ã¹ã帰ã£ã¦ãããæ°100ããªç§ã å ´åã«ãã£ã¦ã¯æ°ç§ã¬ã¹ãã³ã¹ã«æéãããããã¨ãããã¾ãã
ç¹ã«é»æ³¢ãæªãã¨ããã§ä½æ¥ãããã¨ãã¬ã¹ãã³ã¹ã¾ã§ã®æéã æ°ç§åä½ã«ãªãã¾ãã
ä¸ã¤ä¸ã¤ã®æä½ã®ã¬ã¹ãã³ã¹ãé
ãã¨ãä¾ãã°æ®æ®µh
, j
, k
, l
ã®
é£æãªã©ã§ç§»åãã¦ããã¨ã1è¡ã1æåãã¨ã®ç§»åã§ãã¬ã¹ãã³ã¹ãå¾
ããã
ç®ã«è¦ãã¦æä½å¹çãè½ã¡ã¾ãã
ãã®ãããã¹ãã¼ããã©ã³ã§ã¯åä½ã§ã®h
, j
, k
, l
ã¯æ¥µå使ããªãããã«ãã
ããã¿ã¤ãæ°ãå°ãªãã¦ãã以ä¸ã®ãããªæä½ã極å使ãããã«ããæ¹ãããã§ãã
ã¤ã¾ãVimã®åºç¤ãå¿ å®ã«ã¨ãããã¨ã§ããã
ã¿ã¤ãæ°(端æ«ã¸ã®è¦æ±æ°)ãå°ãªããªãã°ãããã ãã¬ã¹ãã³ã¹ã«å¾
ããããæé
ãæ¸ãã¾ãã
移åå 容 | å ¥åãã¼ |
---|---|
åèªç§»å | w , b , e |
æå®æå移å | f , t |
è¡æ«è¡é 移å | ^ , $ |
ãã¡ã¤ã«ã®å é ãæ«å°¾ç§»å | gg , G |
æå®è¡ç§»å | [æå®è¡ã®æ°]gg |
ãã¼ã¸ç§»å | <C-f> ã<C-b> |
段è½ç§»å | { , } |
æ¤ç´¢ | / |
åèªæ¤ç´¢ | * , # , g* , g# |
ã«ã¦ã³ãæå® | 5h , 5j , 5k , 5l ãªã© |
ããã辺ã¯ãæ®éã®Vimmerãªãç¡æèã§ãã£ã¦ãããã¨ããããã¾ãããã ãã¼ãªãã¼ããé«éåãã¦æä½ãã¦ããæ¹ãããã¨æãã®ã§ç¹ã« ããããæ¹ã¯æ³¨æããã¾ãããã å ¨ç¶ä½¿ãããªãã¦ããªãæ¹ã¯ãæ¥é ããæèãã¦ä½¿ãããã«ãã¾ãããã
ãã®ãããªãï¼ãã¼ã¹ããã¼ã¯ã§ã®ç§»åã®æ©è½ãããã©ã«ãã§å¤ãç¨æããã¦ããããã ã¹ãã¼ããã©ã³ã§ã®ç·¨éã¯ãä»ã®ã¨ãã£ã¿ãããVimã®æ¹ãåªä½æ§ã ããã¨æãã¾ãã
極åCtrl
, Shift
ãªã©ã使ããªãããã«ãã
ã¹ãã¼ããã©ã³ã§ã¿ã¤ãããã¨ãããã¨æãã¾ããã
ã¹ãã¼ããã©ã³ã®ã½ããã¦ã§ã¢ãã¼ãã¼ãã¯PCç¨ãã¼ãã¼ãã¨
æ¯è¼ãã¦è¨å·ãé常ã«æã¡ã¥ããã§ãã
ã¾ããSSHã¯ã©ã¤ã¢ã³ã端æ«ã§ã¯ç¨æããã¦ãããã¨ãããã¾ããã
ã¹ãã¼ããã©ã³ã®ããã©ã«ãã®ã½ããã¦ã§ã¢ãã¼ãã¼ãã¯Ctrl
ã
ããã¾ããã
ä¸è¨ã®ãã¨ãèæ
®ãã極åãè¨å·ãCtrl
ã使ç¨ããªããããª
ãã¼ãããã³ã°ããã¦ãããã¨ããããããã¾ãã
ä¾ãã°ãä¸è¨ã§ä¸ããè¡æ«è¡é 移åã®^
, $
ã¯è¨å·ã§ããã
ãã¼ã¸åæ¹å¾æ¹ç§»åã®<C-f>
, <C-b>
ã¯Ctrl
ã使ãã®ã§
è¨å·ãCtrl
ã使ããªããã¼ã«ãã¼ãããã³ã°ãã¦ããã¨ããã§ãããã
ã¾ãããã使ãã³ãã³ããåããã¦ãã¼ãããã³ã°ãã¦ãã㨠ããã§ãããã
ä¸è¨è¨å®ä¾ã¯ããã使ãã³ãã³ã(ãã¡ã¤ã«ä¿åãã¦ã£ã³ãã¦ãéãã)
è¨å·ãCtrl
ã使ã移åããã¼ãããã³ã°ãã¦ãã¾ãã
(<Space>
ã¯ã½ããã¦ã§ã¢ãã¼ãã¼ãã§ããã¼ãåã¨åããã¦æåãã
表示ããã¦ããè²´éãªãã¼ãªã®ã§prefixã¨ãã¦ä½¿ããã¨ããããããã¾ãã
ãªããPCç¨ãã¼ãã¼ãã§ãåæ§ã«æ¼ããããã£ãããã¾ãã)
" ãã¡ã¤ã«ä¿å nnoremap <Space>w :<C-u>w<CR> " ã¦ã£ã³ãã¦ãéãã nnoremap <Space>q :<C-u>q<CR> " è¡é ãè¡æ«ç§»å nnoremap <Space>h ^ vnoremap <Space>h ^ nnoremap <Space>l $ vnoremap <Space>l $ " ãã¼ã¸åæ¹ãå¾æ¹ç§»å nnoremap <Space>j <C-f> vnoremap <Space>j <C-f> nnoremap <Space>k <C-b> vnoremap <Space>k <C-b>
ã¾ããsubmodeãã©ã°ã¤ã³ã使ã£ã¦ã 移åå°ç¨ã®ã¢ã¼ããç¨æããã®ããå§ãã§ãã
submodeã¯ãVimã® normalã¢ã¼ããinsertã¢ã¼ãã®ãããªã¢ã¼ãããæ¬ä¼¼çã« ä½ãããã®ã¢ã¼ãã§ã ã使ç¨ã§ãããã¼ãããã³ã°ãè¨å®ããäºãã§ãã¾ãã
以ä¸ã®è¨å®ã§ã¯ãsubmodeã使ã£ã¦ã 縦æ¹å移åå¹çåã¢ã¼ããä½ã£ã¦ãã¾ãã
" 縦移åã®å¹çå(è¦submode pluginã¤ã³ã¹ãã¼ã«) call submode#enter_with('ex-move', 'nv', '', '<Space><Space>', '<Nop>') call submode#leave_with('ex-move', 'nv', '', '<Space>') call submode#map('ex-move', 'nv', '', 'j', '<C-f>zz') call submode#map('ex-move', 'nv', '', 'k', '<C-b>zz') call submode#map('ex-move', 'nv', '', 'n', '5jzz') call submode#map('ex-move', 'nv', '', 'm', '5kzz') call submode#map('ex-move', 'nv', '', 'l', '}zz') call submode#map('ex-move', 'nv', '', 'h', '{zz')
<Space>
ã2åã¿ã¤ããããã¨ã«ããã縦æ¹å移åå¹çåã¢ã¼ãã«å
¥ãã¾ãã
縦æ¹å移åå¹çåã¢ã¼ãã«å
¥ã£ã¦ããéã¯ãj
, k
ã§ãã¼ã¸åå¾æ¹åã¹ã¯ãã¼ã«ã
n
, m
ã§5j
, 5k
ãl
, h
ã§æ®µè½åå¾ç§»åãã§ãã¾ãã
移åæä½ãçµãã£ããã<Space>
ã1åã¿ã¤ããããã¨ã§ã¢ã¼ããæãã¾ãã
ããããï¼ãã¼ã¹ããã¼ã¯ã§ç®çã®æä½ãå¯è½ã«ãã¦ãã æ¼ãã¥ãããã¼ã®ã¿ã¤ãæ°ã大åæãããããã¨ããããã¨æãã¾ãã
ä¸è¨è¨å®ã¯PCç¨ãã¼ãã¼ãã§ãæç¨ã§ãããå ¥åå¹çãè½ã¡ãã¹ãã¼ããã©ã³ã§ã¯ æ´ã«æç¨ã«ãªãã¾ãã
ãã®ããã«ããã使ãããã ãã©ã¿ã¤ããã¥ãããã¼ã¯ãã¼ãããã³ã°ãã¦ãã ã¨ã¹ãã¼ããã©ã³ã§ã®æä½ãã°ãã¨ããããããªãã¾ãã
Ctrl
ã極å使ããªããããªè¨å®ãç°¡åã«ããããã¨ãã
ã¹ãã¼ããã©ã³ã§ã®ç·¨éããä»ã®ã¨ãã£ã¿ãããVimã®æ¹ã
åªä½æ§ãããçç±ã®ä¸ã¤ã¨ãªãã¾ãã
ãã¾ã
èªåã¯å¸¸ç¨ãã¦ããªãã®ã§ã詳ãããç´¹ä»åºæ¥ãªãã®ã§ããã vim-easymotionã¨ãããã©ã°ã¤ã³ãå ¥ãã㨠移åæã®ãã¼ã¿ã¤ãæ°ãããªãæ¸ãããããªã®ã§ãã¹ãã¼ããã©ã³ã§ã®Vimæä½ã«ãã£ã¦ãã ããç¥ãã¾ããã
vim-easymotionã«ã¤ãã¦ã¯ãç¾ã¡ã³ããã§ãã haya14busaããã®è¨äºã詳ããã®ã§ãç´¹ä»ã¾ã§ã«ãªã³ã¯ãå¼µã£ã¦ããã¾ã
Vim-EasyMotionã§ã«ã¼ã½ã«ç§»åãçéã«ãã¦çç£æ§ããã£ã¨åä¸ããã
ã¾ã¨ã
以ä¸ããã¹ãã¼ããã©ã³ã§Vimãæä½ããããã«ãã£ã¦ãããã»ãããããã¨ã§ãã
ä½ããã£ãæã®ããã«ãã¹ãã¼ããã©ã³ããVimãããããããæ®æ®µããæºåã ãã¦ã¯ãããã§ããããï¼
ããã§ã¯Vim Advent Calendar 2014ã®13æ¥ç®ã®è¨äºãçµããã¾ãã
Happy Vim Life!