2010-09-15 8 views
9

Mam dokumenty Vima, które mają regiony bloków kodu, które używają regionów "składni", aby wyróżniać podświetlanie składni z głównego dokumentu. Na przykład, mam zdefiniowany region składni o nazwie "pyregion", którego używam, gdy wprowadzam kod Pythona. Obszary pyregionu dokumentu są następnie podświetlane za pomocą ustawień w pliku składni Pythona, natomiast obszar poza regionem używa pliku składni dokumentu głównego.Podświetlenie bloku koloru w pełnej szerokości w Vim

Chcę, aby całe tło w regionie Pythona było cieniowane innym kolorem, aby odróżnić go od obszarów innych niż Python w dokumencie. Mogę dostać część drogi nie wprowadzając tła dla całego regionu Pythona:

:highlight pyregion guibg=#555555 

ale polecenie Powyższe zmiany tła tylko na obszarach, które mają znaki tekstowe na nich, a nie dla całego tle z region, który wydaje się nadal rządzony jak reszta dokumentu przez kolor tła zdefiniowany dla grupy "Normalnej". Jest to w porządku - przyciąga uwagę do regionu, ale wygląda na poplamiony, ponieważ tylko same znaki kodu mają inne tło, a nie całe pasmo regionu na ekranie.

Czy istnieje sposób na uzyskanie jednolitego pasma o innym kolorze tła w całym regionie, a nie tylko w regionie, w którym występują postacie?

Jest powiązany pytanie i odpowiedź w poniższy link, ale tak daleko, jak można stwierdzić, że odpowiedź na to pytanie również zmienia tło tylko tam, gdzie jest tekst: Highlight Code Block Backgrounds with Vim

Dzięki za wszelką pomoc.

Odpowiedz

7

Nie wierzę, że jest to możliwe bez śmiesznego bodge (patrz poniżej). Jeśli spróbujesz to:

:match Error /\%3l/ 

Podkreśla co Vim uważa się cała linia 3. podkreślając jedynie rozciąga się do końca bohaterów. To sprawia, że ​​podejrzewam, że nie będzie sposobu wyróżnienia nieistniejących postaci.


Zatrzymaj czytanie teraz.

Czysto jako ćwiczenie w śmieszności, można oczywiście dodać ogromną liczbę spacji na końcu każdej linii, a następnie usunąć je, gdy zapiszesz. To byłoby głupie, ale to jedyna rzecz, o której mogę pomyśleć.

" Add spaces to the end of every line (you could also do 
" this selectively for lines that don't already have lots 
" of spaces and you could do it on reading a file or whatever) 
:exe '%s/$/' . repeat(' ', 1000) . '/' 
" Automatically remove spaces at the end of every line when saving 
:autocmd BufWritePre %s/ *$// 
" Make 'A' append at the end of the non-space characters on the line 
:nmap A/*$<CR>i 
" Make '$' go to the end of the non-space characters on the line 
:nmap $ /.\? *$<CR> 

Nota prawna: nie rób tego.

+0

Al - Dzięki, zastanawiałem się, że to tylko ograniczenie Vima, które jest mądrzejsze do zaakceptowania niż walka. Otrzymałem podobną odpowiedź z zapytania opublikowanego na vim grupach użytkowników. Łatwiej jest to zaakceptować, gdy wiem, że nie ma rozsądnego sposobu na uzyskanie dokładnie tego, czego chcę. –

Powiązane problemy