diff --git a/core/tarantool_lua.m b/core/tarantool_lua.m
index 1ed40a189688d56670e64c6580427b3053825852..f1c3b4934116c419c11960c5a7717c5bd110863b 100644
--- a/core/tarantool_lua.m
+++ b/core/tarantool_lua.m
@@ -67,6 +67,7 @@ static char format_to_opcode(char format)
 	case '&': return 2;
 	case '|': return 3;
 	case '^': return 4;
+	case ':': return 5;
 	default: return format;
 	}
 }
@@ -148,6 +149,7 @@ lbox_pack(struct lua_State *L)
 		case '&': /* set field&=val */
 		case '|': /* set field|=val */
 		case '^': /* set field^=val */
+		case ':': /* splice */
 			u32buf= (u32) lua_tointeger(L, i); /* field no */
 			luaL_addlstring(&b, (char *) &u32buf, sizeof(u32));
 			luaL_addchar(&b, format_to_opcode(*format));
diff --git a/test/box/lua.result b/test/box/lua.result
index 5ad20fae0032aeee5d7754e75e357bf5b363ecb6..b741939bfeb64c5e28c42ce3da5a3e9c4c50efb4 100644
--- a/test/box/lua.result
+++ b/test/box/lua.result
@@ -560,3 +560,18 @@ lua f==g
 ---
  - true
 ...
+lua box.space[0]:insert('test', 'something to splice')
+---
+ - 1953719668: {'something to splice'}
+...
+lua box.space[0]:update('test', ':p', 1, box.pack('ppp', 0, 4, 'no'))
+---
+ - 1953719668: {'nothing to splice'}
+...
+lua box.space[0]:update('test', ':p', 1, box.pack('ppp', 0, 2, 'every'))
+---
+ - 1953719668: {'everything to splice'}
+...
+lua box.space[0]:truncate()
+---
+...
diff --git a/test/box/lua.test b/test/box/lua.test
index d9242622cf6ca98d168780aa41fed9663a73fae3..b763425fe611f61bd74fc8f7fcee044c06eedd20 100644
--- a/test/box/lua.test
+++ b/test/box/lua.test
@@ -154,3 +154,7 @@ exec admin "lua box.fiber.cancel(box.fiber.self())"
 exec admin "lua f:id(), box.fiber.self():id()"
 exec admin "lua g = box.fiber.self()"
 exec admin "lua f==g"
+exec admin "lua box.space[0]:insert('test', 'something to splice')"
+exec admin "lua box.space[0]:update('test', ':p', 1, box.pack('ppp', 0, 4, 'no'))"
+exec admin "lua box.space[0]:update('test', ':p', 1, box.pack('ppp', 0, 2, 'every'))"
+exec admin "lua box.space[0]:truncate()"