Vim: Как установить курсор в режиме вставки? [Дубликат]

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

def print_tuple(some_tuple=(1,2,3)):
    print some_tuple

print_tuple()        #1
print_tuple((1,2,3)) #2

Я дам вам подсказку. Вот разборка (см. http://docs.python.org/library/dis.html ):

# 1

0 LOAD_GLOBAL              0 (print_tuple)
3 CALL_FUNCTION            0
6 POP_TOP
7 LOAD_CONST               0 (None)
10 RETURN_VALUE

# 2

 0 LOAD_GLOBAL              0 (print_tuple)
 3 LOAD_CONST               4 ((1, 2, 3))
 6 CALL_FUNCTION            1
 9 POP_TOP
10 LOAD_CONST               0 (None)
13 RETURN_VALUE

Я сомневаюсь, что опытное поведение имеет практическое применение (кто действительно использовал статические переменные в C без размножающихся ошибок?)

] Как вы можете видеть, - преимущество производительности при использовании неизменяемых аргументов по умолчанию. Это может иметь значение, если это часто называемая функция или аргумент по умолчанию занимает много времени, чтобы построить. Кроме того, имейте в виду, что Python не C. В C у вас есть константы, которые в значительной степени свободны. В Python у вас нет этого преимущества.

65
задан lanrat 27 June 2011 в 06:25
поделиться

7 ответов

Я обычно имею текущий режим vim на статусной линии, между прочим. Если вы ищете простоту, вы можете установить только эту информацию на статусную линию .

Однако, как правило, действительно сумасшедшие вещи случаются, когда у вас есть блокировка крышки нажата и находится в командном режиме (поскольку hjkl теперь HJKL - достаточно J и K достаточно, чтобы заставить вас вытащить волосы, когда вы не понимаете, что происходит. Сделайте :h J и :h K, чтобы понять, что я имею в виду). Просто остерегайтесь клавиши блокировки колпачка , и вы будете в порядке в большинстве случаев IMO.

-3
ответ дан GmonC 20 August 2018 в 18:12
поделиться
  • 1
    Как это отвечает на вопрос? – David Rivers 4 August 2015 в 19:55
  • 2
    @DavidRivers Это приложение проблемы XY, в которой OP просил разрешения своей проблемы (не зная о том, что вы в обычном режиме vim и хотите, чтобы курсор изменился, чтобы указать его), но оказался удовлетворен альтернативой (и IMO не большое) решение (усиление его статусной линии с состоянием) – Steven Lu 12 December 2017 в 23:05

Популярная опция, указывающая на переход в режим Вставки (и обратно в обычный режим), переключает параметр cursorline, который отвечает за выделение текущей строки экрана.

:autocmd InsertEnter,InsertLeave * set cul!

или

:autocmd InsertEnter * set cul
:autocmd InsertLeave * set nocul
72
ответ дан ib. 20 August 2018 в 18:12
поделиться
  • 1
    Я также установил ячейку для выделения bg вместо подчеркивания по умолчанию: hi CursorLine cterm = NONE ctermbg = black – Nikita Prokopov 10 November 2011 в 10:21
  • 2
    Есть ли причина, по которой это не будет работать в vim cygwin? Я в редакторе и ввел оба набора строк, и я не смог установить какой-либо подсветки, помимо полного столбца или строки highligting – TankorSmash 9 July 2012 в 18:26
  • 3
    @Tankor: параметр cursorline не зависит от какой-либо конкретной платформы; он доступен на любом экземпляре Vim, скомпилированном с функцией +syntax (что обычно бывает). – ib. 15 January 2014 в 07:52

Чтобы изменить форму курсора в разных режимах, вы можете добавить следующее в свой vimrc.

Для Gnome-Terminal (версия 2.26) Edit

if has("autocmd")
  au InsertEnter * silent execute "!gconftool-2 --type string --set /apps/gnome-terminal/profiles/Default/cursor_shape ibeam"
  au InsertLeave * silent execute "!gconftool-2 --type string --set /apps/gnome-terminal/profiles/Default/cursor_shape block"
  au VimLeave * silent execute "!gconftool-2 --type string --set /apps/gnome-terminal/profiles/Default/cursor_shape ibeam"
endif

Если вы используете более одного профиля в gnome-терминале, вам, возможно, придется адаптировать его к вашим профилям.

Для Konsole в KDE4Edit

let &t_SI = "\<Esc>]50;CursorShape=1\x7"
let &t_EI = "\<Esc>]50;CursorShape=0\x7"

Это работает с несколькими вкладками и окнами .

http://vim.wikia.com/wiki/Change_cursor_shape_in_different_modes

12
ответ дан IvanGL 20 August 2018 в 18:12
поделиться
  • 1
    Я в первую очередь использую vim в tmux над ssh с шпатлевкой. Существует ли более универсальный вариант? – lanrat 27 June 2011 в 06:21
  • 2
    Работал как шарм. Благодарю. – Ernest 1 December 2012 в 02:33
  • 3
    Изменение настроек гнома-терминала с помощью команды gconftool-2 - очень плохая идея. Это не только влияет на терминал, где работает ваш vim, но и все остальные текущие и будущие вкладки гнома-терминала одного профиля. – egmont 11 September 2016 в 18:38
  • 4
    это работает на консоль, спасибо. Но одна проблема заключается в том, что выход из режима вставки - slooow, не уверен, почему – Hoang Tran 2 July 2017 в 11:35
  • 5
    @HoangTran использовать set ttimeoutlen=0 – Bananach 30 August 2017 в 07:10

Если вы используете tmux и iTerm2 в OSX, следующее изменяет курсор от блока на курсор и выделяет текущую строку

if exists('$TMUX')
  let &t_SI = "\<Esc>Ptmux;\<Esc>\<Esc>]50;CursorShape=1\x7\<Esc>\\"
  let &t_EI = "\<Esc>Ptmux;\<Esc>\<Esc>]50;CursorShape=0\x7\<Esc>\\"
else
  let &t_SI = "\<Esc>]50;CursorShape=1\x7"
  let &t_EI = "\<Esc>]50;CursorShape=0\x7"
endif
:autocmd InsertEnter * set cul
:autocmd InsertLeave * set nocul

credit: https: // gist. github.com/andyfowler/1195581

13
ответ дан knpwrs 20 August 2018 в 18:12
поделиться
  • 1
    Обратите внимание, что это для iTerm . Поскольку стандартные действительно работают, но также работают во всех других поддерживающих терминалах, это, вероятно, неправильный ответ. Посмотрите здесь - & gt; stackoverflow.com/a/42118416/340947 – Steven Lu 12 December 2017 в 23:06

Следующие работы для xterm / urxvt / ... (Linux), iTerm2 (Mac), Git Bash с ConEmu (Windows) и т. д. (см. комментарии):

let &t_SI = "\e[6 q"
let &t_EI = "\e[2 q"

" optional reset cursor on start:
augroup myCmds
au!
autocmd VimEnter * silent !echo -ne "\e[2 q"
augroup END

Когда вы используете tmux важно использовать его таким образом (без выхода \<Esc>Ptmux;) - tmux будет отслеживать правильную форму курсора при переключении окон / панелей. Вам может потребоваться установить TERM=xterm-256color перед запуском tmux, если он не работает для вас.

Другие параметры (замените номер после \ e [):

    Ps = 0  -> blinking block.
    Ps = 1  -> blinking block (default).
    Ps = 2  -> steady block.
    Ps = 3  -> blinking underline.
    Ps = 4  -> steady underline.
    Ps = 5  -> blinking bar (xterm).
    Ps = 6  -> steady bar (xterm).
21
ответ дан laktak 20 August 2018 в 18:12
поделиться

Я считаю полезным только мигать курсором в режиме Вставки и статично в других режимах.

set guicursor+=n-v-c:blinkon0
5
ответ дан Tahir Hassan 20 August 2018 в 18:12
поделиться

Вы можете попробовать terminus vim plugin :

В режиме вставки форма курсора изменяется на тонкую вертикальную полосу. В режиме замены он изменяется на подчеркивание. При возврате в нормальный режим он возвращается к стандартной «блочной» форме.

4
ответ дан Tim Gabets 20 August 2018 в 18:12
поделиться
Другие вопросы по тегам:

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