<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
    主站蜘蛛池模板: 皇色在线免费视频| 亚洲精品天堂成人片AV在线播放| 国产亚洲Av综合人人澡精品| 4hu四虎最新免费地址| 亚洲视频在线观看| 免费A级毛片无码专区| 亚洲高清在线视频| 四虎影视成人永久免费观看视频 | h片在线免费观看| 久久久久亚洲精品日久生情 | 亚洲乱码一二三四区国产| 亚洲免费观看在线视频| 亚洲免费闲人蜜桃| 成人性生免费视频| 免费观看又污又黄在线观看| 免费播放特黄特色毛片| 一级特黄a大片免费| 亚洲国产精品国产自在在线| 和老外3p爽粗大免费视频| 国产亚洲精品a在线无码| 亚欧免费无码aⅴ在线观看| 亚洲高清无在码在线电影不卡| 最近中文字幕无免费| 国产成人亚洲合集青青草原精品 | 一区免费在线观看| 亚洲精品无码专区在线在线播放| 在线观看免费无码专区| 亚洲影视一区二区| 日本19禁啪啪无遮挡免费动图| 精品国产亚洲AV麻豆| 在线亚洲精品福利网址导航| 国产激情免费视频在线观看| 91嫩草亚洲精品| 国产无遮挡吃胸膜奶免费看视频 | 综合一区自拍亚洲综合图区| 美腿丝袜亚洲综合| 91免费在线播放| 亚洲国产aⅴ成人精品无吗| 国产亚洲自拍一区| www视频免费看| 美女视频免费看一区二区|