インデント用のタブ、位置合わせ用のスペース


17

私はvimをタブで自動インデントし、空白に揃えようとしていますが、実際にはvimはタブでインデントし、整列をタブ+空白で埋めようとしています。

Vimはそれを行います:

ここに画像の説明を入力してください

(各ブロックはタブです)

{
>--long a = 1,
>-->--..b = 2,
>-->--..c = 3;
}

それをするかもしれません:

{
>--long a = 1,
>--.....b = 2,
>--.....c = 3;
}

したがって、タブとスペースのテーマについては多くの質問があると思いますが、いずれもJust Worksソリューションを提供していません。

実際に私は使用しています:

set ai
set cindent
set cinoptions=(0,:0,u0,U0,g0)

私が試したスマートタブうまく動作しているようですプラグインを、私はしようとしたときgg=G、私はいくつかの奇妙なエラーが出ます:

Error detected while processing function CtabRedoIndent..<SNR>12_CheckAlign:
line   11:
E108: No such variable: "b:ctab_lastalign"
Press ENTER or type command to continue
Error detected while processing function CtabRedoIndent:
line   10:
E170: Missing :endwhile

この議論はかなり古いように思えるので、2015年には、これに対処する公式の解決策がありますか?



私はこれのためのマッピングを持っていません、ただのアイデア...しかし、タブキーを押したときに(好きな幅の)タブを挿入するようにVimを設定した場合、実際にはShiftを入力するとタブをスペースに展開します-タブ?それで、この種の整列は簡単になりませんか?
ワイルドカード

(PS:xkcdコミックの「宗教的な戦争」フォーラムで「タブvs.スペース」に関する素晴らしい議論があります。お楽しみください;)
ワイルドカード

回答:


3

これを本当に自動的に行うことは困難です。Vimは、「インデント」とは何か、「整列」とは何かを知りません。また、インデントとアラインメントを正確に構成するものについて意見が分かれる人もいます。

そうは言っても、Smart Tabsプラグインはあなたが望むことをするように設計されています。私は、Cファイルに対しては十分に機能することを発見しましたが、いくつかの注意事項があります。それが壊れる例えば、Pythonのファイルを、そして時にはCファイルのためのいくつかの予期しない(私にとっては、とにかく)のことを行います。
ソースを見ると、5分でどのように機能するかを実際に理解することはできません。


3

あなたが言及したSmart Tabsプラグインは、それと同じくらい良いです。最初に、あなたがやったのと同じエラーにぶつかり、あきらめましたが、最終的には修正に数分かかりました。次のパッチを適用してみてください。

--- ctab.vim.orig   2016-08-11 17:05:20.767275274 +0800
+++ ctab.vim    2016-08-11 17:15:20.039286525 +0800
@@ -221,7 +221,7 @@
       if a:line == line('.')
         let b:ctab_lastalign=a:line
       else
-        unlet b:ctab_lastalign
+        unlet! b:ctab_lastalign
       endif
       set ts=50
       set sw=50

後で、誰かがSmart Tabs wikiセクションで同様の修正を提案していることがわかりました。残念ながら、新しいリリースはありません。


0

vimのインデントは、次のスクリプトを使用して簡単に実行されます

単一ファイルのインデントを実行するスクリプト

#!/bin/bash 
#Author: Ankit shah
#Enter file name to indent as argument
file=$1
vim $file -c "normal gg=G" -c "wq"
#Use expand command to turn tabs into spaces. Code uniform across different vim environment
expand -t 4 $file $file 

2
これは質問に対する答えではありません
マーティントゥルノイジ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.