vimを使ってテキストファイルを切り取る方法は?たとえば、ファイルを場所56に切り取りたいとします。したがって、位置1〜56のすべての内容を維持し、位置57(含む)から各行の終わりまでのすべての内容を削除したいと思います。
テキストファイル:
Web Application - http://sharepoint
Url CompatibilityLevel
--- ------------------
http://sharepoint 15
http://sharepoint/sites/appcatalog 15
http://sharepoint/sites/devtest 15
http://sharepoint/sites/publishing 15
awkを使用すると、私が欲しいものをある程度得ることができます。
$awk '{print $1}' file
結果:
Web
Url
---
http://sharepoint
http://sharepoint/sites/appcatalog
http://sharepoint/sites/devtest
http://sharepoint/sites/publishing
ところが、問いたいとしたら、ぜひタイトルを維持したい。 vimを使用してこのファイルを技術的に56の場所に切り取るにはどうすればよいですか?好ましくはvimで。 vimでファイルを開いたという意味です。
答え1
これを行うにはいくつかの方法があり、そのいくつかは次のとおりです。
:%s/\%>56c.//g
:%s/\%57c.*//
:%s/\v^.{56}\zs.*//
:% normal 57|D
(この仮説virtualedit=all
またはvirtualedit=onemore
)- Shift-g
57
|Ctrl-v1Shift-gEndx(この仮定virtualedit=all
)
編集する:リクエストに応じてマニュアルに関連する逆流を追加しました。
- 1.と2.(
:h /\%c
)の場合:\%23c
特定の列を一致させます。
\%<23c
特定の列を一致させる前に。
\%>23c
特定の列を一致させた後。
これら3つを使用して、バッファまたは文字列の特定の列を一致させることができます。 「23」は任意の列番号であってもよい。最初の列は1です。実際、列はバイト数です(したがって、マルチバイト文字の場合は正確ではありません)。 - 3.(
:h \zs
)の場合:\zs
どこでも一致し、一致開始を設定します。次の文字は完全一致の最初の文字です。 4.(
:h |
、:h D
、:h :normal
、:h :%
、:h 'virtualedit'
)の場合:|
現在行の列[数]をフィルタリングします。排他的な動き。シシはパイプではありません["x]D
行末までカーソルの下の文字を削除し、[count]-1行を[レジスタxで]削除します。 「d$」の同義語です。:norm[al][!] {commands}
通常モードコマンド{commands}を実行します。これにより、コマンドラインに入力された通常モードコマンドを実行できます。 {commands}は入力したように実行されます。%
等しい1,$
(フルファイル)'virtualedit'
カンマ区切りの単語リスト:
block
ビジュアルブロックモードで仮想編集が可能です。
insert
挿入モードで仮想編集を許可します。
all
すべてのモードで仮想編集が可能です。
onemore
カーソルが行末を通過することを許可する仮想編集とは、実際の文字がないところにカーソルを置くことができるという意味です。これは、タブの中央または行末を超えている可能性があります。ビジュアルモードで長方形を選択してテーブルを編集するのに便利です。
5.(
:h G
,:h CTRL-V
,:h <End>
,:h x
)の場合:G
デフォルトが最後の行である[count]行に移動し、空白ではなく最初の文字を1行ずつ検索します。[count]CTRL-V
ブロックごとにビジュアルモードを開始します。$
または<End>
行末まで。["x]x
カーソルの下と後の[count]文字を[xを登録するために]削除します(1行ずつ削除しません)。 「dl」と同じです。
答え2
「位置」が「列」を参照すると仮定すると、正規表現を使用できます。
:%s/^\v(.{56}).*/\1/
^
これは、Perl(\v
魔法)が行の先頭から始めて.
56回一致し、その内容(括弧)を保存して.*
行の残りの部分と一致するように置き換えるという意味です\1
。
awk
何らかの理由でフィルタが違法でない限り、moreまたはlessを呼び出すことがあります。
:%!awk '{print $1}'
答え3
vimから{print $1}
ヘッダーを除くすべてを取得するには、次のようにします。
:2,$s/ .*//