Сценарии Vim: Сохраните позицию курсора и экранируйте представление в вызове функции

Я понял из Django Project , что вы можете использовать только фиктивную функцию gettext:

Если вы определяете пользовательскую настройку ЯЗЫКОВ, как объяснено в предыдущем пункте, это нормально. помечать языки как строки перевода, но использовать функцию «фиктивная» ugettext(), а не ту, что в django.utils.translation. Вы никогда не должны импортировать django.utils.translation из вашего файла настроек, потому что этот модуль сам по себе зависит от настроек, и это вызовет циклический импорт. ".

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

from django.utils.translation import ugettext_lazy as _

language = models.CharField(max_length=5, choices=map(lambda (k,v): (k, _(v)), settings.LANGUAGES), verbose_name=_('language'))

22
задан JSBձոգչ 5 June 2009 в 04:31
поделиться

3 ответа

вы можете использовать getline () для сохранения текущей строки буфера и winline () для сохранения текущей строки окна.

Это будет примерно так:

  • сохранить строку окна с линией выигрыша ()
  • переместите курсор в верхнюю часть окна с помощью: normal! ЧАС
  • сохранить буферную строку с помощью getline ()
  • ...
  • восстановить буферную строку с помощью: exec 'normal! '.myline.'G'
  • прокрутите вверх с помощью: normal zt
  • затем восстановите исходную строку окна с помощью: exec 'normal! '.mywinline.'H'

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

3
ответ дан 29 November 2019 в 04:40
поделиться

Вы можете сохранить метку для первой экранной строки, которая отображается в окне, и также восстановить ее. Пример, который выполняет команду g? для всего буфера и восстанавливает обе позиции:

:noremap <F11> mkHmlggg?G`lzt`k

Прохождение команды:

  • mk : ​​установить отметку k для текущая позиция
  • H : перейти к первой строке на экране
  • ml : установить метку l для этой позиции
  • ggg? G : выполнить команда
  • `l : перейти к отметке l`
  • zt : установить эту строку первой строкой на экране
  • ` `k : перейти к отметке k`
6
ответ дан 29 November 2019 в 04:40
поделиться

Просто: h getpos ()

let save_cursor = getpos(".")
" MoveTheCursorAround
call setpos('.', save_cursor)
6
ответ дан 29 November 2019 в 04:40
поделиться
Другие вопросы по тегам:

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