Vimの2番目の列を削除する方法は?


12

次のようなタブ区切りファイルがあります。

name1   verb1   name2   verb2   etc...

2番目の列を削除します。これらの回答の 1つを編集してみましたが、sedawkに詳しくないため、できませんでした。

誰も私を助けることができますか?


@KasiyA OPのオリジナルはタブを示すために\ tを使用しました。
スチールドライバー14年

@steeldriverわかりました。行の一部だと思った。削除されました。しかし、最初の投稿 .thanks
αғsнιη14年

1
vim visual-blockモードでは問題は解決しませんか?(通常モードでCtrl-v、列を選択しxて削除します)?
Rmano 14年

@Rmanoそれは感謝に役立ちますが、ビジュアルモードでファイルの最後に移動する方法を教えてもらえますか?(ctrl Gを試しましたが、機能しません)。
teaLeef 14年

回答:


10

vimでは、次のコマンドを使用できるはずです

:%s/\t[^\t]*//

(置換のTAB後に、ゼロ以外の任意の文字の出現が続く場合を除きTABます)。ファイルに2列しかない場合は、もう少し単純なものを使用する:%s/\t.*か、行の最後まで:%s/\t.*$最初の文字TABそれに続く文字を置き換えます。


22

受け入れられた答えはこれよりはるかにエレガントです(私はそれを支持しました!)覚えていない場合は、vim 視覚ブロックモードを直接使用できます。vimを開き、次のように(通常モード)列の最初の隅に移動します。

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

入力するCTRL-Vと、カーソルを移動して列を選択できます。これは途中です。

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

最後に進むには、を押しGます。

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

空白の最後の行にいるため、ブロックが壊れているようです。単純に1行上に移動して(上矢印またはk)、もう一度表示します...

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

今、あなたは単にxブロックを削除するために押します:

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


6

私はcutこれに使用します

cut -f1,3- file.txt > newfile.txt
mv newfile.txt file.txt

これをvim内のフィルターとして使用することもできます(これにより、ファイル内のすべての行が置き換えられます。2-9行目を処理する2,9代わりに(たとえば)を使用し%たり、必要な行を選択することもできますV)。

:%!cut -f1,3-

-f1,3-「フィールド1を印刷し、その後にフィールド3と行の終わりまでのすべてのフィールドを印刷する」ことを意味します。デフォルトでcutは、タブを区切り文字として使用します。他の何かが必要な場合は、-dオプションを使用してください(を参照man cut)。


4

次のいずれかを試すことができます。

:%norm WdW

または視覚モードを使用して手動で:

  1. 2列目にジャンプします(例:を押すW)。
  2. で視覚ブロックを開始しCtrl+vます。
  3. 2番目の列を選択します(例:W、を押してG)。
  4. を押して削除しdます。

コマンドラインからインプレースで実行するには、次を試してください:

$ ex +':exe ":%norm f\<Tab>dE"' -scx file

関連:モーションに使用するTabキーのリテラルの書き方

こちらもご覧ください:


はい、+ 1ですが、最後のステップ3)で空白行がある場合、問題が発生する可能性があることに注意してください...
Rmano
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.