Vim: как удалить каждую вторую строку?

Вы можете передать параметр :scope в ваш валидатор следующим образом:

validates_uniqueness_of :medium, scope: :country

См. документацию для некоторых примеров.

90
задан paxdiablo 22 December 2009 в 14:44
поделиться

8 ответов

Для этого можно использовать макрос. Выполните следующие действия.

  • Запустите в командном режиме.
  • Перейдите к началу файла, нажав gg .
  • Нажмите qq .
  • Щелкните стрелку вниз и нажмите dd после.
  • Нажмите q .
  • Нажмите 10000 @ q

PS: Чтобы перейти в командный режим, просто нажмите Escape несколько раз .

98
ответ дан 24 November 2019 в 06:52
поделиться

У вас должна быть возможность использовать макрос:

http://www.oreillynet.com/mac/blog/2006/07/more_vim_save_time_with_macros_1.html

3
ответ дан 3 July 2019 в 09:30
поделиться

Вызовите sed:

:% !sed -e '2~2 d'

^^^^                  pipe file through a shell command
    ^^^^^^            the command is sed, and -e describes an expression as parameter
            ^^^^^     starting with the second line, delete every second line
0
ответ дан 24 November 2019 в 06:52
поделиться

из почтового архива vim :

:let i=1 | while i <= line('$') | if (i % 2) | exe i . "delete" | endif | let i += 1 | endwhile

(При вводе в одну строку в командной строке vim удаляются строки 1,3,5,7, .. .)

8
ответ дан 24 November 2019 в 06:52
поделиться

Вы всегда можете передать команду оболочки по конвейеру, что означает, что вы можете использовать любой язык сценариев, который вам нравится:

:%!perl -nle 'print if $. % 2'

(или использовать «если» вместо «если», в зависимости от того, какие строки вы хочу)

5
ответ дан 24 November 2019 в 06:52
поделиться
:%!awk -- '++c\%2'

или

:%!awk -- 'c++\%2'

в зависимости от того, какую половину вы хотите отсеять.

4
ответ дан 24 November 2019 в 06:52
поделиться

Вы можете использовать собственные возможности поиска и замены Vim следующим образом: Поместите курсор в первую строку и введите в обычном режиме:

:.,/fff/s/\n.*\(\n.*\)/\1/g
  • ., / Fff / - это диапазон для замены. Это означает «от этой строки до строки, которая соответствует регулярному выражению fff (в данном случае последняя строка).
  • s /// - это команда замены. Она ищет регулярное выражение и заменяет каждое его вхождение строкой. g в конце означает повторение подстановки до тех пор, пока регулярное выражение будет найдено.
  • Регулярное выражение \ n. * \ (\ n. * \) соответствует новой строке, затем целая строка (. * соответствует любому количеству символов, кроме новой строки), затем еще одна новая строка и еще одна строка. Круглые скобки \ ( и \) вызывают запись выражения внутри них, поэтому мы можем использовать его позже, используя \ 1 .
3
ответ дан 24 November 2019 в 06:52
поделиться
:map ^o ddj^o
^o

Здесь ^ означает CTRL. Рекурсивный макрос для удаления строки каждые две строки. Хорошо выберите первую строку и все готово.

10
ответ дан 24 November 2019 в 06:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: