ãã®è¨äºã¯ Vim Advent Calendar 2014 ã® 25 æ¥ç®ã®è¨äºã§ãã
Google ããæ§ã
ãªè¨èªã«å¯¾ããèªç¤¾å
ã§ã®ã¹ã¿ã¤ã«ã¬ã¤ããå
¬éãã¦ããã®ã¯ãåç¥ã§ãããããC++ のものã JavaScript のものãªã©ãããããã®è¾ºãã¯å²ã¨æåãã¨æãã¾ãã
ã§ã¯ãVim script ã®ãã®ãããã®ã¯ãåç¥ã§ãããã?
Google ã¯ãVim script ã«ã¤ãã¦ã2 ã¤ã®ã¬ã¤ããå
¬éãã¦ãã¾ãã
åè
ãã«ã¸ã¥ã¢ã«ã¦ã¼ã¶ã¼åããå¾è
ãããã¼ã¦ã¼ã¶ã¼åããã¨ãã£ãä½ç½®ä»ãã®ããã§ããããããGoogle ãã¾ã¨ãã¦ããã ããã£ã¦ããªããªããã¤ã³ããæãã¦ãã¾ãã
ãã ãããã¯ããã¾ã§ Google ã社å
åãã«ä½ã£ããã®ãéµåã¿ã«ãã¦ã¯ãããªãããããã¯ãä¸è¬ã®äººã使ãå ´åã¯åèã«ããªãæ¹ãããé¨åãã¡ãã»ãè¦åãããã¾ãã
ããã§ãã®è¨äºã§ã¯ããã® 2 ã¤ã®ã¹ã¿ã¤ã«ã¬ã¤ããè¦ãã«ããã£ã¦æ³¨æãã¹ãç¹ãã¾ã¨ãããã¨æãã¾ããå
¨ã¦å人ã®è¦è§£ã§ããå¼ç¨ã«å
¥ã£ã¦ãã訳ã¯ãç§ã«ããåæè¨³ã§ãã
å ¨ä½ã«ã¤ãã¦
maktaba ãåæã«ãªã£ã¦ãã
Google ãå
¬éãã¦ãããmaktaba ã¨è¨ã Vim ãã©ã°ã¤ã³åãã®ãã©ã°ã¤ã³ã©ã¤ãã©ãªãããã¾ãã
ãããã®ã¬ã¤ãã§ã¯ãäºãããã¨ã«ãVim ã®ãã®æ©è½ã¯ä½¿ããªãã§ä»£ããã« maktaba ã®ããã使ããã®ããã«æç¤ºãã¦ãã¾ãã
ãããã誤解ãæããã«è¨ãã¨ãmaktaba ã¯ãã®ä»çµã¿ä¸ä½¿ãã¹ãã§ã¯ããã¾ããã
ãã£ããç°¡åã«çç±ãè¨ãã¨ãmaktaba 㯠$ ããç§»ããã¨ãã§ããªã jQuery ã®ãããªãã®ã§ãããå¥ã®è¨ãæ¹ãããã¨ãURL ã«ãã¼ã¸ã§ã³ãå«ã¾ãã¦ããªã Web API ã®ãããªãã®ã§ããä»å¾äºææ§ã®ãªã夿´ãå
¥ã£ãç¬éã«æ»äº¡ããæªæ¥ãããã¾ãããä»ã§ããmaktaba ã®ãã°ã«ä¾åããåä½ããããã©ã°ã¤ã³ã¯ãã°ãä¿®æ£ãããã¨æ»ã«ã¾ãã
ã¨è¨ãããã§ãmaktaba äºã
ã¨æ¸ããã¦ããé¨åã¯è¯éºã«ã¹ã«ã¼ããã®ãè¯ãã§ãã
Google Vimscript Style Guide
Regular Expressions
Prefix all regexes with \m\C.
å ¨ã¦ã®æ£è¦è¡¨ç¾ã¯ \m\C ã§å§ãããã¨ã
\m 㯠'magic' ããªã³ã®ç¶æ
ã§æ£è¦è¡¨ç¾ã®è§£éãè¡ãã\C ã¯ãã¿ã¼ã³å
¨ä½ã大æåå°æåãåºå¥ããããã«ãã¾ãã
ããã¯ç¢ºãã«èª¤çãé²ãã®ã«ã¯å½¹ã«ç«ã¡ã¾ãããæ¯åæå®ããã®ã¯ããåé·ã§ãã
æ£è¦è¡¨ç¾ãåãåã Vim script ã®é¢æ°ã®ãã¡ã'magic' ãªãã·ã§ã³ãé©ç¨ãããã®ã¯ search() 㨠searchpos() ãããã§ãã
ãã使ã =~# ã 'magic' ã®å½±é¿ã¯åãã¾ããã
'ignorecase' ãªãã·ã§ã³ã®å½±é¿ãåããã®ã¯ãmatch()ãmatchend()ãmatchlist()ãmatchstr()ãsearch()ãsearchpos()ãsearchpair()ãsearchpairpos()ãsubstitute() ã«ãªãã¾ããå¤ãããã§ãããmatch() ã¨ãã®æ´¾çãsearch() ã¨ãã®æ´¾çãsubstitute() ãªã®ã§ã系統ã¨ãã¦ã¯ 3 ã¤ãããã§ãã
ãã®è¾ºãã¯ãã£ã¨èª¿ã¹ããã®ãªã®ã§ãè¶³ããªãã£ããéã£ã¦ãããæãã¦ããããã¨å©ããã¾ãã
èªä¿¡ããªããã° \m ã \C ãä»ãã¦ããã®ã¯æªããã¨ã§ã¯ãªãã§ãããå¿
é ã«ããã»ã©ã§ããªãããªãã¨æãã¾ãã
Type checking
Use strict and explicit checks where possible.
å¯è½ãªãã°å³å¯ãã¤æç¤ºçãªåãã§ãã¯ãããªããã
is# ãªã©ã使ããã¨ããã®ã¯ãã®éãã§ãããå
¨ã¦ã®å¤æ°ã使ãåã«åããã§ãã¯ããã®ã¯åé·ã«ãªãããã¾ãã
ä¾ãã° Ruby ãæ¸ãã¦ãã¦ãå
¨ã¦ã®é¢æ°ã§ããã®å¼æ°ã«ã¤ãã¦åã®ãã§ãã¯ãããã³ã¼ããæ¸ãã§ãããã? æ¸ãã¾ããããã
æå¾
ããåã§ãªããã°ã大ä½ã®å ´åã¯ä¾å¤ãé£ã¶ã®ã§ããã¡ãã¨ä¾å¤ãå¦çããã°åé¡ã¯ãªãã§ãããããã¾ã«éæªãæå¾
ããªãç¶æ
ã®ã¾ã¾å
ã«é²ãã§ãã¾ããã¨ãããã¾ããããã®æã¯ãã®æã§ãã
Python / Other Languages
Python
Use sparingly.
Use python only when it provides critical functionality, for example when writing threaded code.
Other Languages
Use vimscript instead.
Avoid using other scripting languages such as ruby and lua. We can not guarantee that the end user's vim has been compiled with support for non-vimscript languages.
Python ã¯æ éã«ä½¿ããªãããä»ã®è¨èªã¯ä½¿ã£ã¦ã¯ããã¾ããã
ã¯ããGoogle ãªã®ã§ãå¯ããã¨ãã£ãã¨ããã§ãããããPython ã ã許å¯ãã¦ä»ã許å¯ããªãçç±ãå
¨ã説æããã¦ãã¾ããã
å人çãªè¦è§£ãè¿°ã¹ããªãã°ãå¤é¨ã¤ã³ã¿ã¼ãã§ã¼ã¹ã¯ä½ç¨ã®å¿
ç¶æ§ããªãéãã¯ä½¿ãã¹ãã§ã¯ããã¾ãããçç±ã¯ Google ã説æãã¦ããéãã§ãã¦ã¼ã¶ã¼ã® Vim ã§ä½¿ããã¨ã¯éããªãããã§ããããã¯å½ç¶ Python ã«ãè¨ãããã¨ã§ãã
ãã ãããªããæ¸ã Vim script ãããã¾ã§èªååãã®ãã®ã§ããã°ãæ¸ãæãããã«å¤é¨ã¤ã³ã¿ã¼ãã§ã¼ã¹ã使ããã¨ã¯é¸æè¢ã¨ãªãããã§ããããä»è¨èªã§ããã°ãã§ã«æã£ã¦ããã©ã¤ãã©ãªã Vim script ã§ããããæ¸ãç´ããããªçä¼¼ã¯ãä¸é¨ã®å¤æ
ãããã¡ã«ä»»ãã¦ãããªãã¯ä½¿ããªããè¨èªã§ä½¿ããªããã©ã¤ãã©ãªã使ãã°ããã®ã§ãã
â¦ç§ã¯å¤æ
ãããªã®ã§ããæé
ãã§ãã
Commands
In the plugin/commands.vim or under the ftplugin/ directory, defined without [!].
plugin/commands.vim ã ftplugin/ ãã£ã¬ã¯ããªã«ã[!] ãä»ããã«å®ç¾©ãã¾ãã
plugin/commands.vim ã«ãã¨æ¸ãã¦ã¾ããã絶対ã«ãã£ã¦ã¯ããã¾ããã
æè¿ã§ãã Vim ãã©ã°ã¤ã³ã¯ãã©ã°ã¤ã³ããã¼ã¸ã£ã§ã¤ã³ã¹ãã¼ã«ãã¦ãruntimepath ã追å ãã¦ããæ¹å¼ãæµè¡ã£ã¦ãã¾ãããæ¬æ¥ã¯ Vim ãã©ã°ã¤ã³ã¯ 1 ã¤ã®ã¦ã¼ã¶ãã£ã¬ã¯ããªã«ã¾ã¨ãã¦ããã¦ãããã®ã§ããã®ãããªéç¨ãå¯è½ã«ãªã£ã¦ããã¹ãã§ãã
ã¿ããªãã¿ã㪠plugin/commands.vim ã«ã³ã¼ããæ¸ããããå½ç¶ãã¡ã¤ã«åãè¡çªãã¾ãã
ã¡ãªã¿ã«ã©ããããã®ãã¡ã¤ã«åã®ã«ã¼ã«ã¯ maktaba ã«ãããã®ã®ããã§ãã
[!] ã«ã¤ãã¦ã¯ãé©åãªã³ãã³ãåãä»ãã¦ããã°ãã¦ã¼ã¶ã®å®ç¾©ã䏿¸ããããã¨ã¯ã»ã¨ãã©ãªããã¨ã¯æãã¾ãããããã¯ã©ã¡ãã§ãè¯ãã¨æãã¾ãã
Autocommands
Place them in plugin/autocmds.vim, within augroups.
plugin/autocmds.vim ã«ãaugroup ä»ãã§å®ç¾©ããªããã
Commands ã¨åããã¡ã¤ã«åã®åé¡ã
Mappings
Place them in plugin/mappings.vim, using maktaba#plugin#MapPrefix to get a prefix.
plugin/mappings.vim ã«ãmaktaba#plugin#MapPrefix ã使ã£ã¦å®ç¾©ããªããã
Commands ã¨(ry
maktaba(ry
Naming
Prefix all variables with their scope.
å ¨ã¦ã®å¤æ°ã«ã¯ã¹ã³ã¼ãã®ãã¬ãã£ãã¯ã¹ãä»ããªããã
l: ã«ã¤ãã¦ã¯ç¡çã«ä»ããå¿
è¦ã¯ãªãã¨æãã¾ãããä¸é¨ã®å¤æ°åã v: ã¨è¡çªããå¯è½æ§ãããã®ã§ãä»ããæ¹ãå®å
¨ã§ã¯ããã¾ãã
ç§ã¯çç¥ããæ´¾ã§ãã
Google Vimscript Guide
ãã¡ãã¯ããã¼ã¦ã¼ã¶åãã¨ãããã¨ã§ãStyle Guide ã®æ¹ã®å 容ãå«ã¾ãã¦ãã¾ããéè¤ãã¦ããªãé¨åã«ã¤ãã¦è¨åãã¾ãã
Structure
ããã«æ¸ããã¦ãããã®ã®å¤ã㯠maktaba åæã®æ§æã®ããã§ãã
Documentation
Use vimdoc.
vimdoc ã使ããªããã
ãã® vimdoc ã¨ãããã¼ã«ã¯ãç§ããã¾ã詳ãããªãã®ã§ããã軽ã調ã¹ã¦ã¿ãéãã 㨠maktaba ã®æ§æã«ä¾åãã¦ããããã§ãã
ãã¨ã¯å¤åç㪠help ã«å¯¾å¿ãã¦ããã®ããã¡ãã£ã¨ãããã¾ããã§ããã
ã¨è¨ãããã§ãå人çã«åé¡ãããã¨æãç¹ãæãã¦ã¿ã¾ããã
çµæ§è²ã
æ¸ãã¾ããããæåã«è¨ã£ãéããã¤ã³ãã¯æãããã¦ãã¦ãmaktaba ã«çµ¡ã¾ãªãé¨åã¯ããªãåèã«ãªãã¾ããã¤ã¾ã諸æªã®æ ¹æºã¯ maktabaâ¦ã
ããã§ä»å¹´ã® Vim Advent Calendar ã¯çµããã§ããã§ããçããã® Vim ã©ã¤ãã¯å§ã¾ã£ãã°ããã§ããããã§ã¯ã¾ããã¤ã®æ¥ããæªæ¥ã§ãä¼ããã¾ãããï¼