В Виртуальном Режиме Замены Буфер тяжелее прикреплен к своему положению источника.
1. Hello World
^ Cursor
2. I like cheese
3. And beer
При переходе к нормальному режиму замены и удару Internet<CR>And others
новый буфер будет похож на это:
1. Hello Internet
2. And others
3. I like cheese
4. And beer
При выполнении того же в Виртуальной Замене результат будет
1. Hello Internet
2. And othersese
3. And beer
Другой пример (tabstop=2; sts=0):
1. 012345678901234567890
2. Hello beautiful World
^ Cursor
Нажатые клавиши: <Tab><Tab>
Результат режима замены:
1. 012345678901234567890
2. Hello autiful World
Результат виртуального режима замены:
1. 012345678901234567890
2. Hello tiful World
Поскольку в режиме Replace замена сделана символ символом, где Tab
один символ, неважно, сколько символов отображено. В Виртуальном Режиме Замены видимая длина Tab
(:h 'ts'
, :h 'sts'
) используется для замены символов.
Отредактировано после разъяснения OP относительно варианта использования:
Вы не можете сделать это, используя последний официальный выпуск bash
(в настоящее время 4.3.30 согласно эта страница ). lib / sh / netopen.c
показывает, что bash открывает сокет UDP ( SOCK_DGRAM
), а затем пытается подключиться напрямую, не глядя на IP-адрес, чтобы определить, имеет ли смысл устанавливать определенные параметры сокета (в вашем случае SO_BROADCAST
).
Лучше всего отправить патч текущим разработчикам bash
или в соответствующий список рассылки, включить его в официальные выпуски, а затем подождать, пока довольно современная версия bash в вашем NAS не будет обновлена до еще более современная версия, включающая вашу функцию.
Краткий ответ: bash
в настоящее время не может делать это.
Предыдущий ответ :
Вы должны использовать socat
:
$ echo -e "\xff" | socat - UDP-DATAGRAM:255.255.255.255:4000,broadcast
Запись в / dev / udp
использует bash Реализация встроенного сокета
.Насколько мне известно, эта реализация не позволяет отправлять дейтаграммы UDP на широковещательный адрес, так как это требует установки флага SO_BROADCAST
для сокета перед отправкой.
Использование netcat
также не вариант, поскольку он отклоняет широковещательную рассылку UDP:
$ echo -e "\xff" | nc -u 255.255.255.255 4000
nc: netcat.c:573: main: Assertion `connect_sock.proto != NETCAT_PROTO_UDP' failed.
Aborted (core dumped)
Изменить:
Иногда netcat имеет флаг -b
для включения широковещательного адреса. См. этот ответ о широковещательной передаче UDP в Ubuntu.
Откройте два терминала и введите на обоих:
nc -u -l 55555
Откройте третий терминал, установите socat, если нужно, и введите:
echo -n "TEST" | socat - udp-datagram:127.255.255.255:55555,broadcast
Вы должны увидеть, что оба терминала получили сообщение.
Если вы попробуете провести тот же эксперимент с 127.0.0.1, только один терминал получит сообщение, как и ожидалось.