GNU/Linux >> Linux の 問題 >  >> Linux

Vim または Linux でスペースをタブに変換するにはどうすればよいですか?

1 - スペースがあり、タブが必要な場合。

最初に、単一のタブを持つスペースの数を決定する必要があります。そうは言っても、先頭に 4 つのスペースまたは 8 つのスペースがある行があるとします。おそらく、タブを 4 つのスペースにしたいことに気付くでしょう。その情報を使用して、次のことを行います。

:set ts=4
:set noet
:%retab!

ここに問題があります!この一連のコマンドは、行頭のスペースだけでなく、すべてのテキストを検索します。それは次のような文字列を意味します:"Hey,␣this␣␣␣␣is␣4␣spaces" "Hey,␣this⇥is␣4␣spaces" になります 、しかしそうではありません!タブです!

この小さな問題を解決するには、search をお勧めします 、retab の代わりに .

:%s/^\(^I*\)␣␣␣␣/\1^I/g

この検索は、任意の数のタブで始まり、その後に 4 つのスペースが続く行をファイル全体で検索し、見つかった任意の数のタブに 1 を加えた行に置き換えます。

残念ながら、これはすぐには実行されません!

最初は、ファイルにはスペースで始まる行があります。検索は、最初の 4 つのスペースのみをタブに変換し、次のようにします...

コマンドを繰り返す必要があります。何回? pattern not found を取得するまで .プロセスを自動化する方法はまだ思いつきません。ただし、そうする場合:

`[email protected]:`

おそらく完了です。このコマンドは、最後の検索/置換を 10 回繰り返します。プログラムにそれほど多くのインデントがある可能性は低いです。ある場合は、もう一度繰り返してください @@ .

さて、答えを完成させるだけです。反対のことを要求したことは知っていますが、いつ元に戻す必要があるかわかりません。

2 - タブがあり、スペースが必要。

まず、タブを変換するスペースの数を決定します。各タブを 2 つのスペースにしたいとしましょう。次に、次のことを行います:

:set ts=2
:set et
:%retab!

これは、文字列でも同じ問題を抱えています。しかし、文字列内でハード タブを使用しないほうが良いプログラミング スタイルであるため、ここでは実際に良いことをしています。文字列内にタブが本当に必要な場合は、 \t を使用してください .


Vim を使用してすべての 主要 を展開する スペース ('tabstop' より広い) )、retab を使用するのは正しかった ただし、最初に 'expandtab' を確認してください リセットされます (:verbose set ts? et? あなたの友達です)。 retab 範囲を取る なので、通常は % を指定します 「ファイル全体」を意味します。

:set tabstop=2      " To match the sample file
:set noexpandtab    " Use tabs, not spaces
:%retab!            " Retabulate the whole file

このようなことを行う前に (特に Python ファイルで!)、通常は 'list' を設定します。 、見えるように 空白と変更。

.vimrc に次のマッピングがあります このため:

nnoremap    <F2> :<C-U>setlocal lcs=tab:>-,trail:-,eol:$ list! list? <CR>

Linux
  1. LinuxでVimをデフォルトのエディターとして設定する方法

  2. Linuxでシステムホスト名を設定または変更する方法

  3. vimでタブを4つのスペースに設定するには?

  1. Linuxで$Path変数を設定する方法

  2. Linuxでファイルをシンボリックリンクするにはどうすればよいですか?

  3. vimでjキーとkキーを切り替えるにはどうすればよいですか?

  1. Linuxでプリンタを設定する方法

  2. Linuxのchrootjailを設定する方法

  3. Linux でプロセスのプロセッサ アフィニティを設定するにはどうすればよいですか?