<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Calvin's Tech Space

    成于堅忍,毀于浮躁

       :: 首頁 :: 聯系 :: 聚合  :: 管理
    在VIM下使用gg=G格式化shell代碼時,如果代碼中有heredoc,經過格式化后會造成代碼運行失敗。如下:
    do
    ??? echo "Deploying..."
    ??? ssh $USER@$HOST <<-EOF
    cd clat
    mv client client-bak-`date +%Y%m%d`
    tar zxf `basename $TARGET_DEPLOY_ZIP` -C .
    exit
    EOF

    ??? echo ""


    格式化后會成這樣:
    do
    ??? echo "Deploying..."
    ??? ssh $USER@$HOST <<-EOF
    ???? cd clat
    ???? mv client client-bak-`date +%Y%m%d`
    ???? tar zxf `basename $TARGET_DEPLOY_ZIP` -C .
    ???? exit

    ??? EOF
    ??? echo ""
    done


    vim對heredoc的代碼進行了縮進(四個空格),這樣會導執行出錯。

    解決:修改vim格式化shell腳本的規則,格式化時忽略heredoc。

    將如下腳本保存到.vim/indent/sh.vim:
    (來源:http://vim.1045645.n5.nabble.com/bash-heredoc-in-a-for-loop-indented-incorrectly-td1177006.html)
    " Vim indent file
    " Language:??? Shell Script
    " Maintainer:?????? Nikolai Weibull <[hidden email]>
    " Latest Revision:? 2006-04-19

    if exists("b:did_indent")
    ? finish
    endif
    let b:did_indent = 1

    setlocal indentexpr=GetShIndent()
    setlocal indentkeys+==then,=do,=else,=elif,=esac,=fi,=fin,=fil,=done,=EOF,=END
    setlocal indentkeys-=:,0#

    if exists("*GetShIndent")
    ? finish
    endif

    let s:cpo_save = &cpo
    set cpo&vim

    function GetShIndent()
    ? let lnum = prevnonblank(v:lnum - 1)
    ? if lnum == 0
    ??? return 0
    ? endif

    ? " Add a 'shiftwidth' after if, while, else, case, until, for, function()
    ? " Skip if the line also contains the closure for the above
    ? let ind = indent(lnum)
    ? let line = getline(lnum)
    ? if line =~ '^\s*\(if\|then\|do\|else\|elif\|case\|while\|until\|for\)\>'
    ??????? \ || line =~ '^\s*\<\k\+\>\s*()\s*{'
    ??????? \ || line =~ '^\s*{'
    ??? if line !~ '\(esac\|fi\|done\)\>\s*$' && line !~ '}\s*$'
    ????? let ind = ind + &sw
    ??? endif
    ? endif

    ? if line =~ '^.*<<.*\(EOF\|END\)'
    ??? let ind = 0
    ? endif
    ? if line =~ '^"\?\(EOF\|END\)"\?$'
    ??? let ind = indent(search('>.*EOF', 'b'))
    ? endif
    ? " Subtract a 'shiftwidth' on a then, do, else, esac, fi, done
    ? " Retain the indentation level if line matches fin (for find)
    ? let line = getline(v:lnum)
    ? if (line =~ '^\s*\(then\|do\|else\|elif\|esac\|fi\|done\)\>' || line =~ '^\s*}')
    ??????? \ && line !~ '^\s*fi[ln]\>'
    ??? let ind = ind - &sw
    ? endif

    ? return ind
    endfunction

    let &cpo = s:cpo_save
    unlet s:cpo_save

    不過delimiter只能是EOF或者END。

    posted on 2011-05-26 18:23 calvin 閱讀(457) 評論(0)  編輯  收藏 所屬分類: VIM
    主站蜘蛛池模板: 黄色网页在线免费观看| 亚洲国产欧美一区二区三区| gogo免费在线观看| 又粗又大又猛又爽免费视频| 337p日本欧洲亚洲大胆人人 | 性感美女视频在线观看免费精品 | 亚洲jjzzjjzz在线播放| 亚洲免费闲人蜜桃| 亚洲人成在线中文字幕| 国产va精品免费观看| 久久亚洲国产成人影院| 最近中文字幕mv免费高清电影| 国产精品亚洲自在线播放页码| 最近最新中文字幕完整版免费高清 | 国产精品亚洲精品青青青| 好男人www免费高清视频在线| 久久夜色精品国产噜噜亚洲a| 国产最新凸凹视频免费| 免费看内射乌克兰女| 亚洲一区无码中文字幕| 国产拍拍拍无码视频免费| 亚洲综合视频在线| 亚洲免费网站观看视频| 精品亚洲av无码一区二区柚蜜| 亚洲成a人片在线观看日本麻豆| 国产vA免费精品高清在线观看| 久久亚洲精品中文字幕三区| 91香蕉国产线在线观看免费| 97se亚洲国产综合自在线| 免费观看四虎精品国产永久| 成全在线观看免费观看大全| 亚洲AV综合色区无码二区偷拍| 国产免费啪嗒啪嗒视频看看| 成人电影在线免费观看| 亚洲综合久久精品无码色欲| 国产精品亚洲不卡一区二区三区| 色欲A∨无码蜜臀AV免费播| 亚洲午夜在线播放| 久久亚洲综合色一区二区三区| 中文字幕无码成人免费视频| 一级午夜a毛片免费视频|