Загрузка...
Linux
Новости, статьи, обсуждения, - все что связано с GNU Linux, FreeBSD, OpenBSD, Sun Solaris, Mac OS X и другими системами. Если вы интересуетесь данной темой - добро пожаловать в сообщество.
     

Vim: удаление нежелательных пробелов

08.10.10, 07:25
Автор ggg

Иногда мы сталкиваемся с ситуацией, когда нам надо удалить пробелы в конце строк (trailing spaces), работая в редакторе Vim. Как это сделать наиболее простым и удобным образом?

 

Во-первых, можно просто набрать команду

:%s/\s\+$//

которая удалит пробелы в конце каждой строки. Если мы хотим назначить операцию очистки на какую-то клавишу - то нам подойдет следующая строка в файле конфигурации .vimrc

:nnoremap < silent> < F5> :let _s=@/< Bar>:%s/\s\+$//e< Bar>:let @/=_s< Bar>:nohl< CR>

Данная команда несколько интереснее предыдущей тем, что сохраняет последний параметр поиска, например, если я искал слово 'test', то после нажатия клавиши F5, на которую назначено удаление пробелов в конце строк и последующем нажатии кнопки 'n' (для поиска последней запрошенной строки) у меня будет происходить поиск строки 'test' а не пробелов в конце строк.

Рассмотрим еще один улучшенный вариант функции нахождения и удаления нежелательных пробелов. В данном контексте будет считать нежелательными пробелы в конце строки и перед символом табуляции:

 

function ShowSpaces(...)
  let @/="\\v(\\s+$)|( +\\ze\\t)"
  let oldhlsearch=&hlsearch
  if !a:0
    let &hlsearch=!&hlsearch
  else
    let &hlsearch=a:1
  end
  return oldhlsearch
endfunction
function TrimSpaces() range
  let oldhlsearch=ShowSpaces(1)
  execute a:firstline.",".a:lastline."substitute ///gec"
  let &hlsearch=oldhlsearch
endfunction
command -bar -nargs=? ShowSpaces call ShowSpaces(< args>)
command -bar -nargs=0 -range=% TrimSpaces < line1>,< line2>call TrimSpaces()
nnoremap < F12>     :ShowSpaces 1< CR>
nnoremap < S-F12>   m`:TrimSpaces< CR>``
vnoremap < S-F12>   :TrimSpaces< CR>

 

Данная функция хороша еще и тем, что может работать не только в обычном режиме, но и в режиме выделения, т.е. позволяет выделить блок текста и удалить нежелательне пробелы только в нем.

И в завершение, рассмотрим вариант удаления пробелов в конце строк автоматически при сохранении файла:

autocmd BufWritePre * :%s/\s\+$//e

Данный вариант может быть очень опасен, потому что удаляет лидирующие пробелы всегда, что в некоторых случаях неприемлимо и может испортить файл. Поэтому можно подстраховаться и назначить удаление пробелов только для некоторых типов файлов, к примеру, скриптов на языке Perl:

autocmd BufWritePre *.pl :%s/\s\+$//e

Оригинал: http://vim.wikia.com/wiki/Remove_unwanted_spaces

Комментарии

Войдите, чтобы оставить комментарий