11

Vim で Python コードをインデントするためにタブ キーを使用していますが、ブロックをコピーして貼り付けるたびに、Vim はすべてのタブを 4 つのスペースに置き換えます。IndentationError

:set paste関連する質問で提案されているように設定しようとしましたが、違いはありません

他のサイトでは、「tabless」コードを貼り付け、ビジュアル エディターを使用して再インデントすることを提案していますが、これは大きなブロックになると問題を引き起こします

コピー/貼り付けのタブを維持するために vim に適用できる設定はありますか?

これについて助けてくれてありがとう:)

編集:

標準のgnome端末技術(ctrl + shift + c / mouseなど)を使用して、vim内でコピーして貼り付けています。

私の .vimrc は次のとおりです。

syntax on
set ts=4
if has("terminfo")
let &t_Co=8
let &t_Sf="\e[3%p1%dm"
let &t_Sb="\e[4%p1%dm"
else
let &t_Co=8
let &t_Sf="\e[3%dm"
let &t_Sb="\e[4%dm"
endif

ts -> テキスト入力のタブストップを n に設定することを調べましたが、どの値がタブ文字を維持するのかわかりません

4

4 に答える 4

7

:h tabstopすべてのオプションと、それらがどのように相互に作用するかを参照してください。

タブを好む場合は、次の設定が適しています。

set tabstop=4
set shiftwidth=4
set noexpandtab

これらの設定で、ヒット<Tab>すると が得られ<Tab>ます。

スペースを好む場合は、次の設定が適しています。

set tabstop=4
set shiftwidth=4
set expandtab

これらの設定で、ヒット<Tab>すると が得られ<Space><Space><Space><Space>ます。

何を選択しても、端末のキー バインドをコピー/貼り付けに使用しないでください。Vim 内では、 orで「ヤンク」しy、「プット」する必要があります。オプションで、/ のような特定のレジスタを使用して、システム クリップボードのコンテンツに/からヤンク/プットする、または/システム クリップボードに/からヤンク/ペーストする (Vim がクリップボード サポート付きで構築されている場合)。pP"ay"ap@a"+y"+p

補足として、短い名前よりも読みやすいため、設定の長い形式の名前を使用する必要があります。未来のあなたはあなたに感謝します。

于 2012-09-25T15:05:59.580 に答える
5

ロマンが言ったこと。また、他にも便利な設定がいくつかあります。これは私の .vimrc からの抜粋です:

set autoindent " always set autoindenting on"
set smartindent " use smart indent if there is no indent file"
set tabstop=4 " <tab> inserts 4 spaces"
set softtabstop=4 " <BS> over an autoindent deletes 4 spaces."
set smarttab " Handle tabs more intelligently"
set expandtab " Use spaces, not tabs, for autoindent/tab key."
set shiftwidth=4 " an indent level is 4 spaces wide."
set shiftround " rounds indent to a multiple of shiftwidth"

vim では、:h <setting>これらの設定のそれぞれについて入力して、その機能の詳細を確認します。

于 2012-09-25T16:36:47.447 に答える
5

端末のvimインスタンスに中クリックで貼り付けていました。私は私のvimrcにこれを持っています:

set tabstop=2           " (ts)
set softtabstop=2       " (sts) Turned off with 0
set shiftwidth=2        " (sw)  Used for autoindent, and << and >>
set expandtab           " (et)  Expand tabs to spaces

走った

:set paste
:set noexpandtab

そしてvimはソーステキストにあったタブを保持しました. 私の設定を上書きしなくてもexpandtab、vim はソース テキストのタブを自動展開していました。

于 2015-03-24T17:23:15.387 に答える
2

まず、romainl が回答で示したように、インデント設定が好みのスタイルを表していることを確認してください。

Vim の外部からコードを貼り付ける必要がある場合 (たとえば、別の端末からの選択)、:retab!コマンドはスペースをタブに修正できます。貼り付けられたテキストの場合、適切な範囲の完全なコマンドは次のようになります

:'[,']retab!

または、コマンドを使用して貼り付けを試みることもできます"*]p。これにより、インデントがカーソル位置に自動的に適応します (「 」を参照:help ]p)。

于 2012-09-25T15:46:14.973 に答える