Vim видалити порожні рядки


Відповіді:


1233
:g/^$/d

:gвиконає команду в рядках, які відповідають регулярному вираженню. Режекс - "порожній рядок", а команда - :d(видалити)


38
Спасибі соумергер. Це моя улюблена відповідь, оскільки вона фактично пояснює, що робить команда: g.
Tim Swast

4
Це видалить усі порожні рядки (не містять жодних символів пробілу ..), але це може бути не єдиною вимогою. Хтось може зберегти один із порожніх рядків. :%!cat -sможе бути вибір ..
coanor

2
: g / ^ \ s * $ / d з регулярним виразом "будь-який можливий пробіл" у рядку
oyd11

180

Знайшли, це:

g/^\s*$/d

Джерело: Потужність g у vim wikia

Коротке пояснення :g

:[range]g/pattern/cmd

Це діє на вказаний [діапазон] (цілий файл за замовчуванням), виконуючи команду Ex cmd для кожного шаблону відповідності рядків (команда Ex - це така, що починається з двокрапки, наприклад :dдля видалення). Перед виконанням cmd , " ." встановлюється поточний рядок.


9
Приємно. Але не зовсім порожній рядок.
innaM

13
Так, так, це буде відповідати рядкам, що містять лише символи пробілу. Я прийму відповідь соулмерге.
майже_лунч

16
які повинні відповідати порожнім рядкам І рядкам, що складаються лише з пробілів ... (* відповідає нулю або декільком екземплярам \ s ...)?
monojohnny

14
Я б стверджував, що чистий пробіл ТІЛЬКИ є порожнім рядком, тоді як жоден пробіл справді не порожній рядок, ви не думаєте? ;)
Касапо

4
Оксфорд каже, що пробіл - це "місце, яке потрібно залити в документі". Витлумачте це, як можете, але саме це я шукав. Дякую!
Джо Трикаріко

53
:v/./d

або

:g/^$/d

або

:%!cat -s

7
Акуратний трюк з: v /./ d (простіше набрати), але тоді вам потрібно зробити: nohl після.
Claes Mogren

1
@ClaesMogren або просто відскочити на control-l
jm3

6
@zladuric згідно з vim.wikia.com/wiki/Power_of_g це reVerse global (так це виконує команду на все, що не відповідає)
adam_0

44

Для видалення лише декількох порожніх рядків (зменшення їх до одного порожнього рядка) можна використовувати та залишати недоторканими одні порожні рядки:

:g/^\_$\n\_^$/d

3
Може хтось пояснить, що означають жетони? (Отже, як це працює?) Спасибі
PAStheLoD

5
\_$означає кінцевий рядок, який можна використовувати всередині візерунка ( $можна використовувати лише в кінці шаблону.) Те саме, \_^що означає початок рядка, і його можна використовувати будь-де всередині шаблону. Отже, шаблон відповідає порожньому рядку, новому рядку і знову порожньому рядку. Див . Сторінку довідки Vim regex .
Wiktor Stribiżew

1
Ще один спосіб зробити те ж саме::g/^$/,/./-j
SergioAraujo

14
  1. як видалити всі заготовки рядків

    :%s,\n\n,^M,g
    

    (зробіть це кілька разів, використовуючи всі порожні рядки, що пішли)

  2. як видалити всі заготовки рядків, залишаючи SINGLE порожньою лінією

    :%s,\n\n\n,^M^M,g
    

    (зробіть це кілька разів)

  3. як видалити всі заготовки, залишаючи ДВА порожніх рядка НА МАКСИМАЛЬНИЙ,

    :%s,\n\n\n\n,^M^M^M,g
    

    (зробіть це кілька разів)

для того, щоб ввести ^ M, я повинен контролювати-Q та control-M у windows


2
Ви також можете використовувати \rзамість Ctrl-M.
dash-tom-bang

6

Як щодо:

:g/^[ \t]*$/d



5

Ця функція видаляє лише дві чи більше порожніх рядків, покладіть рядки нижче у свій vimrc, а потім використовуйте \ d для виклику функції

fun! DelBlank()
   let _s=@/
   let l = line(".")
   let c = col(".")
   :g/^\n\{2,}/d
   let @/=_s
   call cursor(l, c)
endfun
map <special> <leader>d :keepjumps call DelBlank()<cr>

4

Я спробував кілька відповідей на цій сторінці, але багато з них не спрацювали для мене. Можливо тому, що я використовую Vim в Windows 7 (не глузуй, просто пожалуй мене: p)?

Ось найпростіший варіант, який я виявив, що працює над Vim у Windows 7:

:v/\S/d

Ось довша відповідь на Vim Wikia: http://vim.wikia.com/wiki/Remove_unwanted_empty_lines


3
:g/^\s*$/d
^ begin of a line
\s* at least 0 spaces and as many as possible (greedy)
$ end of a line

пасти

:command -range=% DBL :<line1>,<line2>g/^\s*$/d

у вашому .vimrc, потім перезавантажте програму vim. якщо ви використовуєте команду: 5,12DBL, вона видалить усі порожні рядки між 5-м та 12-м рядком. Я думаю, що моя відповідь - найкраща відповідь!


Опублікувавши відповіді, будь ласка, додайте та пояснення, що описують, що ви змінили чи додали, або як це працює чи щось. Незважаючи на те, що ваша відповідь може бути вирішенням, певно, що деякі люди, які читають це, не розуміють, що це означає чи як це працює. І будь ласка, зробіть це англійською мовою.
Тім

Це насправді не має значення. На це питання було прийнято відповідь 5 років тому
Тім

Я думаю, що відповідь соулдерже: g / ^ $ / d - не найкраща відповідь. Я редагую, щоб покращити його відповідь за допомогою: g / ^ \ s * $ / d. але чому я не можу спостерігати за моїм редагуванням у "показати всі зміни до цієї пози"?
cn8341

Моя відповідь краща за його відповідь, а хто відхилив мою відповідь і чому мою відповідь було відхилено?
cn8341

2

Якщо у вашому тексті щось подвійне між рядками, ця команда видалить подвійний інтервал і об'єднає попередні повторювані порожні рядки в один порожній рядок. На початку рядка використовується тимчасовий роздільник ^^^, тому якщо це зіткнеться з вашим вмістом, виберіть щось інше. Рядки, що містять лише пробіли, розглядаються як порожні.

%s/^\s*\n\n\+/^^^\r/g | g/^\s*$/d | %s/^^^^.*

2

Натисніть deleteклавішу в режимі вставки, щоб видалити порожні рядки.


1

Це працювало для мене:

:%s/^[^a-zA-Z0-9]$\n//ig

В основному він видаляє всі рядки, у яких немає цифри чи літери. Оскільки всі елементи в моєму списку мали літери, він видалив усі порожні рядки.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.