スパム対策として書込み時にID/PWを要求されますが、ローマ字で ほげ/ホゲ で書き込めるようになります。

空白部分のタブを整形したい、見た目を変えずにタブ幅を変更したい、タブをスペースに一括変換をしたい

  • ページ: faq
  • カテゴリー: 編集
  • 投稿日: 2005-02-22 00:39:53 (火)

メッセージ

まず最初にタブ入力のモードを知る

スペースとタブの変換の前に、まずタブキーの入力でスペースが入力されるのか、タブが入力されるのかを知っている必要がある。 次を実行するとそれが確認できる。

:set expandtab?

結果表示が、noexpandtabならば、タブキーでタブが入力される。 expandtabならば、タブキーでスペースが入力される。

noexpandtabモードへ入るには次のように設定する

:set noexpandtab

expandtabモードへ入るには次のように設定する

:set expandtab

変換操作

以下に記述する変換はファイル中のあらゆる空白に対して(行頭以外にも)適用されることに注意する。 以下に記述した変換操作の項目では、expandtab、noexpandtabをいちいち設定しているが、 今のモードが既に同じモードであると分かるならモード設定は飛ばしてもいい。

空白部分のタブを整形したい(タブを含む空白のみの整形)

タブとスペースが混在する空白を適切なタブとスペースの組み合わせに整えたい場合、以下を実行する。

:set noexpandtab
:retab

(タブ入力のモードがnoexpandtabである必要がある。) スペースのみで出来ている空白に対しては変換を行わない。

空白部分のタブを整形したい(全ての空白を整形)

タブを含んでいるかどうかにかかわらず、全ての空白をタブとスペースの適切な組み合わせで整形したい場合、以下を実行する。

:set noexpandtab
:retab!

(タブ入力のモードがnoexpandtabである必要がある。) !が付くと、スペースのみでタブを含まない空白に対してもタブとスペースの組み合わせに変換しようとする。

見た目を変えずにタブ幅を変更したい

現在のタブ幅は以下で確認できる。

:set tabstop

上記を実行したとき、デフォルトではtabstop=8と表示される。 これはタブ幅が8であることを示している。 この状態で、タブ幅を4に変更したいが、見た目を変えたくない場合、以下を実行する。

:set noexpandtab
:retab 4

(タブ入力のモードがnoexpandtabである必要がある。) たとえば、行頭から12桁の空白がある場合は、タブ1つ、スペース4つの組み合わせになっているが、 これを自動的に、タブ3つに変換してくれる。(空白は12桁のままなので見た目に変化はない) tabstopは自動的に4に設定される。retab部分はretabならば、タブを含む空白のみの整形、retab!ならば全ての空白の整形となる。

元に戻す(:undo)する場合は、スペース・タブ変換部分は元に戻るが、tabstopの値は元に戻らないので

:set tabstop=8

として自分でtabstopの値を元に戻す必要がある。

タブをスペースに一括変換をしたい

タブ入力のモードがexpandtabであるときに次を実行する。

:set expandtab
:retab

タブが全てスペースに変換される。

タブを視覚化してみる?

タブを視覚化しておくと変換処理がどう動くか把握し易いかも。 タブ以外も視覚化できるがここでは説明しない。 以下を実行するとタブが見えるようになる。

:set listchars=tab:>-
:set list

タブが>と-の組み合わせで表示される。

:set listchars=tab:'_

のように組み合わせは好きに変えられる。

ヘルプ

ここに書いたことは以下のヘルプに記述されている。

:help expandtab
:help retab
:help 'list'
:help 'listchars'

  • コマンド名を省略すると初心者にはわかりにくくないか -- 2005-02-24 01:56:00 (木)
  • 省略を止めてみた。どうかな? -- 2005-02-27 18:04:29 (日)
  • VERY GOOD! -- 2005-03-29 15:32:02 (火)



トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2014-10-14 (火) 01:13:17 (1402d)