2016-12-15 1 views
0

Я использую Vim и я пытаюсь изменить из файла, как это:Скопируйте блок текста и использовать его для замены второго блока текста с помощью Vim

Block 1                
2.41257378185832E+000 T 2.41257378189357E+000 
5.195589598713250E-002 T 5.195589598548488E-002 
-4.492502140894707E-002 T -4.492502141060845E-002 
3.875548288763534E-002 T 3.875548288654486E-002 
Block 2                
0.000000000000000E+000 F 0.000000000000000E+000 
0.000000000000000E+000 F 0.000000000000000E+000 
0.000000000000000E+000 F 0.000000000000000E+000 
0.000000000000000E+000 F 0.000000000000000E+000 

в файл, как это один:

Block 1 
0.000000000000000E+000 F 0.000000000000000E+000 
0.000000000000000E+000 F 0.000000000000000E+000 
0.000000000000000E+000 F 0.000000000000000E+000 
0.000000000000000E+000 F 0.000000000000000E+000 
Block 2                
0.000000000000000E+000 F 0.000000000000000E+000 
0.000000000000000E+000 F 0.000000000000000E+000 
0.000000000000000E+000 F 0.000000000000000E+000 
0.000000000000000E+000 F 0.000000000000000E+000 

Я искал ответ на проблему, но я не нашел простой способ. То, что я обнаружил, что я могу:

  • Выберите первый блок: Ctrl-V движение "ау
  • Выберите второй блок: Ctrl-V ход гр Ctrl-O" аР

Но этот метод немного медленный, потому что я должен делать это во многих блоках, а не только в одном. Есть ли способ вставить текст и в то же время заменить его текстом, находящимся под ним, без необходимости выбирать текст, который будет удаляться, и текст, который будет заменен?

+0

Текст 'Block1,2' тоже находится в вашем файле или вы только что добавили его? Как вы определяете« блок »? пустыми строками? ? – Kent

+0

Блок представляет собой группу из 4 строк, которые содержат буквы T или F. В моем примере – Ivan

+0

текст Block1,2 тоже находится в моем файле. – Ivan

ответ

0
  • переход к первой строке блока, который вы хотите сП, нажмите "a4Y
  • :let @q='4dd"ap'
  • перейти к первой строке блока, который вы хотите заменить, нажмите @q
0

Ваш вопрос не очень точный, так что вот несколько общих советов:

  • Если followi ng блоки имеют тот же размер, что и первоначально выбранный, вы можете использовать 1v в начале нового блока, чтобы выбрать его.
  • Пастеризованный выбор имеет побочный эффект потери вставного содержимого; т. е. вам нужно повторно выбрать оригинал и снова выдернуть, если вам это нужно еще раз. Мой ReplaceWithRegister предлагает команду gr «два-в-одном», которая заменяет текст, охватываемый {motion}/текстовым объектом, всей линией (линиями) или текущим выбором с содержимым регистра; старый текст удаляется в регистр черных дыр, т. е. он ушел. Он прозрачно обрабатывает много угловых корпусов и позволяет быстро повторять команду стандартного ..
  • Если у вас есть несколько таких блоков для обработки, может понадобиться макрос . Запишите его так, чтобы в качестве последнего действия курсор переместился в следующий блок. Таким образом, вы можете многократно ссылаться на него (или даже превращать его в рекурсивный макрос , который повторяется до конца буфера.
  • В качестве альтернативы, команда :global может использоваться для поиска (например, начала блоков) а затем выполнить команду там, а также нормальный режим через :normal.