Поведение; повторить последнюю команду t беспокоит меня. Можно ли помочь мне сделать его лучше?

В новых версиях PHP (5 и), вызвана функция __ constuct каждый раз, когда Вы используете "новый {Объект}", поэтому если Вы хотите передать данные в объект, добавьте параметры к функции конструкции и затем звоните

$obj = new Object($some, $parameters);

class Object {
    function __construct($one, $two) {}
}

, Именованные конструкторы поэтапно осуществляются из PHP в пользу __ метод конструкции.

19
задан Drew Frank 6 October 2009 в 04:33
поделиться

3 ответа

Возможно, вы ищете не тот ответ, но я не смог удержаться от написания сценария VIM для этого. Я помещаю его в свой .vimrc, и он у меня работает:

map ; :call Semicolon()<CR>
function Semicolon()
   let s:pos1 = getpos(".")
   normal! ;
   let s:pos2 = getpos(".")
   if s:pos1 == s:pos2
      normal! 2;
   endif
endfunction 

Основная идея заключается в том, что ; не перейдет к следующему совпадению, но 2; будет (если есть матч). Скрипт поддерживает ; после любого из tTfF . Самый простой способ реализовать команду , - написать аналогичную функцию для этого.

EDIT Изменил сценарий после прекрасного предложения Люка

EDIT2

Хорошо, эти вещи всегда труднее, чем я думал изначально. Текущее сопоставление имеет следующие проблемы:

  1. Предположим, вы выполнили поиск, подобный tr выше. Что теперь делать d; или c; ? Насколько я понимаю, они должны удалять или изменять до первого r , а не второго. Эту проблему можно решить, выполняя сопоставление только для обычного и визуального режима, но не для режима ожидания оператора.
  2. Текущее сопоставление не работает в визуальном режиме. то есть, если вы наберете v ;;;; после первого ; , редактор больше не будет в визуальном режиме (из-за : call ). Это можно решить, вызвав функцию с использованием @ = вместо : call .

Итак, теперь я получаю следующее в моем .vimrc (я также сделал одну функцию для , и ; ):

" Remap ; and , commands so they also work after t and T
" Only do the remapping for normal and visual mode, not operator pending
" Use @= instead of :call to prevent leaving visual mode
nmap ; @=FixCommaAndSemicolon(";")<CR>
nmap , @=FixCommaAndSemicolon(",")<CR>
vmap ; @=FixCommaAndSemicolon(";")<CR>
vmap , @=FixCommaAndSemicolon(",")<CR>
function FixCommaAndSemicolon(command)
   let s:pos1 = getpos(".")
   execute "normal! " . a:command
   let s:pos2 = getpos(".")
   if s:pos1 == s:pos2
      execute "normal! 2" . a:command
   endif
   return ""
endfunction 
10
ответ дан 30 November 2019 в 02:52
поделиться

Похоже, ваша проблема больше связана с поведением t , а не ; .

Допустим, в вашем примере вы начинаете с 'e':

stackov[e]rflow rocks

Полагаю, вы (разумно) ожидали, что tr прыгнет вперед к [] скалам , а не останется на месте.

Если это так, оставьте ; как есть и, возможно, переназначьте t на lt или что-то в этом роде.

1
ответ дан 30 November 2019 в 02:52
поделиться

2 комментария один: Можете ли вы составить карту; к команде lt_, которую вы ищете? 2-й: Почему бы не использовать вместо 2tr или / r и n?

2
ответ дан 30 November 2019 в 02:52
поделиться
Другие вопросы по тегам:

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