簡體   English   中英

如何使用VIM可視塊逐步增加塊中的數字

[英]How to use VIM visualblock to incrementally increase numbers in a block

我希望對長文件中ATOM記錄后3位數的列中的記錄重新排序,從“ 1”而不是“ 534”開始。 每行代表一個大型蛋白質文件中的一個原子。 我可以選擇帶有可視塊(ctrl + v)的文本塊,但不確定接下來要做什么。 我搜索了類似的問題,但建議的代碼不起作用。

我使用的是VIM編輯器,恐怕不太熟悉編碼。

例如。 有人建議選擇塊,然后使用“:I”(無效)。 其他建議:選擇塊,然后使用“ ctrl + a”(不起作用)。 任何人都有正確的VIM方法嗎? 非常感謝

原子534 C ACE A 0 10.207 22.900 174.325 1.00 0.00 C

原子535 O ACE A 0 10.093 22.142 173.352 1.00 0.00 O

原子536 CA ACE A 0 11.342 22.737 175.312 1.00 0.00 C

原子1 N PRO A 1 9.225 23.976 174.522 1.00 32.27 N

原子2 CA PRO A 1 8.230 23.902 173.411 1.00 32.77 C

原子3 C PRO A 1 8.827 23.261 172.170 1.00 30.28 C

這是您可以做的。

給定此文本文件:

$ cat file
Eg. Someone suggested selecting the block then use ":I" (didn't work). Other suggestion: select block then use "ctrl+a" (didn't work). Would anyone have the correct VIM method by any chance? Many thanks
ATOM 534 C ACE A 0 10.207 22.900 174.325 1.00 0.00 C
ATOM 535 O ACE A 0 10.093 22.142 173.352 1.00 0.00 O
ATOM 536 CA ACE A 0 11.342 22.737 175.312 1.00 0.00 C
ATOM      1 N PRO A 1 9.225 23.976 174.522 1.00 32.27 N
ATOM      2 CA PRO A 1 8.230 23.902 173.411 1.00 32.77 C
ATOM      3 C PRO A 1 8.827 23.261 172.170 1.00 30.28 C

Hi there just more stuff in the file.

在vim中打開文件…

在此處輸入圖片說明

現在輸入

:2,7!sort -k2 -n

按Enter鍵,您應該會看到…

在此處輸入圖片說明

然后:wq ,你很好!

要替換為遞增的數字,我們可以使用寄存器作為計數器; 由於setreg()成功返回0,我們可以純粹出於表達式中的副作用調用它,作為:help sub-replace-expression

:let @a = 1 | %s/^ATOM \+\zs\d\+/\=@a + setreg('a', @a + 1)/g

該模式斷言(使用:help /\\zs )在數字前有ATOM ,以避免其他匹配。

定寬變體

如果您希望盡管數字不斷變化而保持相同的寬度,則需要進行以下更改:

  1. 匹配整個領域,包括領先的空格
  2. 使用:help printf()可以對數字( %3d )進行右對齊的固定寬度格式
:let @a = 1 | %s/^ATOM \zs\s*\d\+/\=printf('%3d', @a + setreg('a', @a + 1))/g

您可以嘗試以下方法:

Ctrl-v ..........................Select the block with the numbers
:'<,'>s/\d+/1 ...................Substitute all numbers by 1
gv ..............................Repeat the selection
o ...............................jump to the beginning of the selection
j ...............................goes to the seccond line 
g Ctrl-a.........................increase the numbers

OBS:如果您已經選擇了范圍,請使用gv重新選擇,然后進行替換,然后重新選擇並使用g Ctrl-a 在幫助系統上查看更多信息:h g_Ctrl-a

我用j表示不增加第一個數字

如果出現問題,請輸入:

:e!

這會在打開緩沖區時獲得緩沖。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM